MST
星途 面试题库

面试题:TypeScript中ArrayLike类型转换为Array的实现及注意事项

假设你有一个符合ArrayLike结构的对象(如{0: 'a', 1: 'b', length: 2}),请用TypeScript代码将其转换为真正的Array类型,并解释在转换过程中可能遇到的类型问题及如何解决。
47.4万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

代码实现

function toArray<T>(arrayLike: { [index: number]: T; length: number }): T[] {
    return Array.from(arrayLike);
}

// 使用示例
const arrayLike = { 0: 'a', 1: 'b', length: 2 };
const realArray = toArray(arrayLike);
console.log(realArray); 

可能遇到的类型问题及解决办法

  1. 类型推断不准确:在定义toArray函数时,如果不明确指定泛型T,TypeScript可能无法准确推断出数组元素的类型。例如,在上述代码中,如果不写<T>,TypeScript可能会将arrayLike的元素类型推断为any,这样在使用realArray时就无法获得准确的类型提示。解决办法就是明确使用泛型<T>,这样toArray函数就能根据传入的arrayLike对象的元素类型正确推断出返回数组的元素类型。
  2. 结构不符合要求:如果传入的对象结构不符合ArrayLike(例如缺少length属性或者索引值不连续),会导致运行时错误。在TypeScript中,虽然类型检查可以在一定程度上确保传入对象具有length属性和数字索引,但对于索引值是否连续等逻辑问题无法在类型层面完全保证。解决办法是在函数内部添加额外的逻辑判断,例如检查length的合理性以及索引值是否连续等,以确保转换的正确性。