MST

星途 面试题库

面试题:TypeScript 泛型的复杂应用问题

实现一个通用的 `DeepPartial` 类型,它能够将对象的所有属性及其嵌套属性都变为可选。例如,给定类型 `{ a: { b: number } }`,应用 `DeepPartial` 后应得到 `{ a?: { b?: number } }`。请说明在实现过程中用到的泛型相关知识和技巧。
24.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
type DeepPartial<T> = {
    [P in keyof T]?: T[P] extends object
      ? DeepPartial<T[P]>
       : T[P];
};

用到的泛型相关知识和技巧:

  1. 索引类型查询(keyofkeyof T 获取类型 T 的所有键,用于遍历对象的属性。
  2. 条件类型(T[P] extends object? ... : ...:判断属性 T[P] 是否为对象类型。如果是,则递归应用 DeepPartial;否则保持原类型。
  3. 映射类型([P in keyof T]: ...:通过 in 关键字对类型 T 的所有属性进行遍历,并根据条件生成新的类型。? 使属性变为可选。
  4. 递归:在条件类型中递归使用 DeepPartial,确保嵌套对象的属性也变为可选。