MST

星途 面试题库

面试题:深度递归实现 TypeScript 复杂工具类型

假设你有一个复杂的嵌套对象类型,例如:type DeepObject = { a: string; b: { c: number; d: { e: boolean } }; f: string[] }; 现在要求自定义一个工具类型 DeepPartial<T>,它能够递归地将 T 中所有层级的属性都变为可选。请实现这个深度递归的工具类型,并解释实现思路。
41.4万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
  1. 实现代码
type DeepPartial<T> = {
    [P in keyof T]?: T[P] extends object
      ? DeepPartial<T[P]>
       : T[P];
};
  1. 实现思路
    • 使用 keyof 操作符获取类型 T 的所有键。
    • 对于每个键 P,使用条件类型 T[P] extends object 判断该键对应的值类型是否为对象。
    • 如果是对象,则递归调用 DeepPartial 将其变为深度可选;如果不是对象,则直接使其可选,即使用 ? 操作符。这样就实现了对所有层级属性的递归可选化。