MST

星途 面试题库

面试题:TypeScript 映射类型中 keyof 和 in 在条件类型嵌套下的深度应用

有一个复杂类型 `type DeepObject = {a: {x: string; y: number}; b: {m: boolean; n: string[]};}`。要求使用 TypeScript 的映射类型、keyof 和 in 关键字,以及条件类型,创建一个新类型 `MappedDeepObject`。`MappedDeepObject` 需满足:如果内部对象的属性值是基本类型(`string`、`number`、`boolean`),则将其值类型变为 `null`;如果是数组类型,则将数组元素类型变为 `undefined`。例如,`MappedDeepObject` 对于上述 `DeepObject` 类型,应变为 `{a: {x: null; y: null}; b: {m: null; n: undefined[]};}`
44.9万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
type DeepObject = {a: {x: string; y: number}; b: {m: boolean; n: string[]};}

type IsBaseType<T> = T extends string | number | boolean ? true : false;
type IsArrayType<T> = T extends Array<infer U> ? true : false;

type MapValueType<T> = 
  IsBaseType<T> extends true ? null :
  IsArrayType<T> extends true ? Array<undefined> :
  T;

type MappedDeepObject = {
  [K in keyof DeepObject]: {
    [P in keyof DeepObject[K]]: MapValueType<DeepObject[K][P]>
  }
}