MST

星途 面试题库

面试题:TypeScript泛型与映射类型在复杂数据结构中的应用

假设有一个嵌套对象结构,例如 `{a: {b: {c: string}}}`,编写一个泛型和映射类型结合的类型定义,实现将所有叶子节点的类型从 `string` 转换为 `number`,并且提供一个函数来创建这种转换后的对象实例。
28.0万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// 泛型和映射类型结合的类型定义
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);

上述代码中:

  1. TransformStringToNumber 是一个递归的映射类型,它遍历对象的所有层级,将所有叶子节点的 string 类型转换为 number 类型。
  2. createTransformedObject 函数接收一个对象,并递归地遍历该对象,将所有叶子节点的 string 值转换为 number,并返回转换后的对象。