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)
}))
};
};
类型安全和类型推断正确性的解释
- 类型定义:首先通过
type
定义了明确的输入类型 InputType
和输出类型 OutputType
。这确保了函数 transformData
的输入和输出类型都是已知且明确的,在编译阶段就能进行类型检查。
- 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.subData
是 string
数组,map(str => str.length)
又会将 string
数组转换为 number
数组,从而保证了 subDataLength
类型的正确性。
- 类型推断:TypeScript 会根据函数内部的操作和已定义的类型进行类型推断。由于输入类型
InputType
和输出类型 OutputType
定义清晰,且 map
等函数的类型签名固定,TypeScript 能够正确推断出整个转换过程的类型,保证了类型安全和类型推断的正确性。