面试题答案
一键面试潜在类型报错情况及原因
- 类型不匹配:
MapToBoolean<Example>
类型推断出的对象属性类型应该是IsString<Example['name']>
和IsString<Example['age']>
,即name
属性为true
,age
属性为false
。- 而代码中实际赋值为
{ name: true, age: true }
,age
属性的赋值与推断类型不匹配,这会导致类型错误。
正确实现思路
- 按照
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 };