在 TypeScript 中,内置工具类型 Extract 的用途是什么?请说明其定义、典型使用场景以及与其他工具类型的区别。
考察说明
考查对 TypeScript 内置工具类型 Extract 的理解,包括其定义、用法和适用场景。
回答思路
- 【回答框架 1】Extract<T, U> 是 TypeScript 内置的条件类型工具,用于从联合类型 T 中提取出可赋值给类型 U 的部分,结果是一个新的联合类型。其实现基于条件类型的分发机制,即当 T 是联合类型时,条件类型会分别对每个成员进行判断,并收集满足条件的成员。
- 【回答框架 2】典型使用场景包括:从联合类型中筛选出特定类型的成员,例如从字符串字面量联合类型中提取出以特定前缀开头的成员;在类型编程中用于过滤类型,配合其他工具类型如 Exclude 实现更复杂的类型操作。
- 【回答框架 3】与 Exclude<T, U> 相反,Exclude 是排除 T 中可赋值给 U 的部分,而 Extract 是保留这部分。两者互补,常用于类型转换和类型约束。
- 【回答框架 4】使用时需注意,Extract 要求 U 是类型,且 T 和 U 可以是任意类型,但通常用于联合类型。如果 T 不是联合类型,则结果要么是 T 本身(如果 T 可赋值给 U),要么是 never。
- 【回答框架 5】在复杂类型编程中,Extract 常与 keyof、typeof 等操作符结合,用于提取对象属性或枚举值的子集,提高类型安全性。
- 【关键点 1】Extract<T, U> 从联合类型 T 中提取可赋值给 U 的成员,返回新的联合类型。
- 【关键点 2】基于条件类型的分发机制,对联合类型每个成员独立判断。
- 【关键点 3】与 Exclude 互补,Exclude 排除可赋值给 U 的成员,Extract 保留。
- 【关键点 4】常用于类型过滤、类型约束和复杂类型编程。
- 【关键点 5】若 T 非联合类型,结果要么是 T(可赋值给 U)要么是 never。