面试题答案
一键面试// 泛型和映射类型结合的类型定义
type TransformStringToNumber<T> = T extends string ? number : T extends object ? {
[K in keyof T]: TransformStringToNumber<T[K]>;
} : T;
// 创建转换后的对象实例的函数
function createTransformedObject<T extends object>(obj: T): TransformStringToNumber<T> {
return Object.fromEntries(
Object.entries(obj).map(([key, value]) => {
if (typeof value === 'object' && value!== null) {
return [key, createTransformedObject(value)];
} else if (typeof value ==='string') {
return [key, parseInt(value, 10)];
}
return [key, value];
})
) as TransformStringToNumber<T>;
}
// 示例使用
const original: { a: { b: { c: string } } } = { a: { b: { c: '123' } } };
const transformed = createTransformedObject(original);
console.log(transformed);
上述代码中:
TransformStringToNumber
是一个递归的映射类型,它遍历对象的所有层级,将所有叶子节点的string
类型转换为number
类型。createTransformedObject
函数接收一个对象,并递归地遍历该对象,将所有叶子节点的string
值转换为number
,并返回转换后的对象。