MST

星途 面试题库

面试题:TypeScript映射类型与复杂数据结构转换

给定一个复杂的数据结构,例如一个多层嵌套的对象,对象中包含数组,数组中又嵌套对象等情况。如`{ data: { items: [{ subData: 'value1' }, { subData: 'value2' }] }`。现在需要使用TypeScript的映射类型,将这个数据结构转换为另一种形式,例如将所有`subData`的值提取出来组成一个新的对象`{ subDataValues: ['value1', 'value2'] }`,并且要保证类型安全,能正确推导出新对象的类型。请写出完整的TypeScript函数及相关类型定义实现这个转换过程。
45.5万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// 原始数据结构类型
type OriginalType = {
    data: {
        items: {
            subData: string
        }[]
    }
};

// 映射类型实现转换
type TransformedType<T> = {
    subDataValues: T extends { data: { items: { subData: infer U }[] } } ? U[] : never;
};

// 转换函数
function transformData<T extends OriginalType>(data: T): TransformedType<T> {
    return {
        subDataValues: data.data.items.map(item => item.subData)
    } as TransformedType<T>;
}