面试题答案
一键面试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` 方法返回的数组类型与原数组类型一致,所以这种类型断言是合理且安全的。