面试题答案
一键面试- 实现代码:
function getTypes<T>(arr: T[]): T extends Array<infer U> ? U : never {
return arr[0] as T extends Array<infer U> ? U : never;
}
- 确保类型安全:
- 通过泛型
T
来表示数组的类型,T
会根据传入数组的实际类型进行推断。 T extends Array<infer U>
这种条件类型推断,确保只有当T
是数组类型时,才会提取数组元素类型U
。如果T
不是数组类型,则返回never
,从而避免在非数组情况下产生错误。
- 通过泛型
- 泛型类型参数在构建复合类型过程中的作用和优势:
- 作用:泛型类型参数
T
作为一个占位符,在函数调用时根据传入的实际参数类型来确定具体类型。这里通过infer U
在条件类型中提取数组元素类型U
,从而构建出返回的联合类型。 - 优势:
- 代码复用:同一个函数可以处理不同类型数组,而不需要为每种数组类型单独编写函数。
- 类型安全:在编译阶段就能检查出类型错误,因为泛型会根据传入的实际类型进行精确的类型推断,确保返回类型和数组元素类型的一致性。
- 作用:泛型类型参数