MST

星途 面试题库

面试题:TypeScript复杂类型报错解读之条件类型与映射类型

下面是一段使用条件类型和映射类型的TypeScript代码: ```typescript type IsString<T> = T extends string? true : false; type MapToBoolean<T> = {[K in keyof T]: IsString<T[K]> }; interface Example { name: string; age: number; } let result: MapToBoolean<Example> = { name: true, age: true }; ``` 分析这段代码潜在的类型报错情况,详细解释报错原因,并提供正确的实现思路和修改后的代码。
16.5万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

潜在类型报错情况及原因

  1. 类型不匹配
    • MapToBoolean<Example> 类型推断出的对象属性类型应该是 IsString<Example['name']>IsString<Example['age']>,即 name 属性为 trueage 属性为 false
    • 而代码中实际赋值为 { name: true, age: true }age 属性的赋值与推断类型不匹配,这会导致类型错误。

正确实现思路

  1. 按照 MapToBoolean 类型定义,根据对象属性的实际类型生成对应的布尔值。

修改后的代码

type IsString<T> = T extends string? true : false;
type MapToBoolean<T> = {[K in keyof T]: IsString<T[K]> };
interface Example {
    name: string;
    age: number;
}
let result: MapToBoolean<Example> = { name: true, age: false };