MST
星途 面试题库

面试题:TypeScript 复杂类型基于函数式构造的转换实现

给定一个嵌套类型 `{ data: { subData: string[] }[] }`,要求将其转换为 `{ data: { subDataLength: number[] }[] }`,即把内部的 `string[]` 转换为 `number[]`,`number` 为对应 `string` 元素的长度。请使用函数式编程风格实现这个类型转换,并且解释在这个过程中如何确保类型安全和类型推断的正确性。
47.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
type InputType = { data: { subData: string[] }[] };
type OutputType = { data: { subDataLength: number[] }[] };

const transformData = (input: InputType): OutputType => {
    return {
        data: input.data.map(item => ({
            subDataLength: item.subData.map(str => str.length)
        }))
    };
};

类型安全和类型推断正确性的解释

  1. 类型定义:首先通过 type 定义了明确的输入类型 InputType 和输出类型 OutputType。这确保了函数 transformData 的输入和输出类型都是已知且明确的,在编译阶段就能进行类型检查。
  2. map 函数:在 transformData 函数中,使用 map 方法对输入数据进行遍历和转换。map 方法的类型签名在 TypeScript 中是明确的,它根据输入数组元素的类型推断出输出数组元素的类型。例如,input.data.map(item => ({ subDataLength: item.subData.map(str => str.length) })),这里 input.data{ subData: string[] } 的数组,map 方法遍历这个数组,item 的类型会被推断为 { subData: string[] },进而 item.subDatastring 数组,map(str => str.length) 又会将 string 数组转换为 number 数组,从而保证了 subDataLength 类型的正确性。
  3. 类型推断:TypeScript 会根据函数内部的操作和已定义的类型进行类型推断。由于输入类型 InputType 和输出类型 OutputType 定义清晰,且 map 等函数的类型签名固定,TypeScript 能够正确推断出整个转换过程的类型,保证了类型安全和类型推断的正确性。