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