MST

星途 面试题库

面试题:TypeScript工具类型条件类型递归深度剖析与应用

给定一个复杂的嵌套对象类型,例如 {a: {b: {c: string}, d: number}[]},使用条件类型递归实现一个工具类型,将所有string类型的属性值转换为大写形式,并且需要详细说明条件类型递归在其中的工作原理以及如何处理复杂嵌套结构。
21.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
type ToUpperCaseDeep<T> = T extends string
  ? Uppercase<T>
    : T extends Array<infer U>
      ? ToUpperCaseDeep<U>[]
      : T extends object
        ? {
            [K in keyof T]: ToUpperCaseDeep<T[K]>;
          }
        : T;

条件类型递归工作原理及复杂嵌套结构处理说明:

  1. 基础类型判断:首先判断 T 是否为 string 类型,如果是,则使用 Uppercase<T> 将字符串转换为大写形式。这是递归的终止条件之一,处理最底层的字符串值。
  2. 数组类型处理:如果 T 是数组类型 Array<infer U>,则递归处理数组元素类型 U,并返回转换后的数组类型 ToUpperCaseDeep<U>[]。这样就可以处理嵌套对象中包含的数组结构。
  3. 对象类型处理:当 T 是对象类型时,使用 keyof T 遍历对象的所有键 K,然后对每个属性值 T[K] 递归调用 ToUpperCaseDeep。这样就可以深入到对象的嵌套结构中,对每个层次的属性值进行处理。
  4. 其他类型:对于既不是字符串、数组也不是对象的其他类型,直接返回 T,保持其原有类型。通过这种递归方式,无论对象嵌套有多复杂,都能将其中所有 string 类型的属性值转换为大写形式。