MST

星途 面试题库

面试题:TypeScript元组类型与泛型结合应用

编写一个泛型函数,该函数接受一个元组作为参数,元组中每个元素的类型相同,函数返回一个新的元组,新元组中的每个元素是原元组对应元素的平方。例如输入[2, 4],返回[4, 16]。请详细说明在实现过程中是如何利用TypeScript的类型系统确保类型安全的。
42.0万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
function squareTuple<T extends number | bigint>(tuple: readonly T[]): T[] {
    return tuple.map((num) => num * num) as T[];
}

// 类型安全说明:
// 1. 定义泛型 `T`,并使用 `extends number | bigint` 约束 `T` 的类型只能是 `number` 或 `bigint`,确保传入元组中的元素类型是可进行乘法运算的数字类型。
// 2. 参数 `tuple` 使用 `readonly T[]` 来接收,保证传入的元组是只读的,避免在函数内意外修改原元组。
// 3. 使用 `map` 方法对元组中的每个元素进行平方运算,由于 `T` 被约束为 `number` 或 `bigint`,所以 `num * num` 操作是类型安全的。
// 4. 最后将结果使用类型断言 `as T[]` 转换为 `T[]`,因为 `map` 方法返回的数组类型与原数组类型一致,所以这种类型断言是合理且安全的。