interview
typescript-frontend
TypeScript 的内置工具类型 Extract 有什么作用

前端 TypeScript 面试题, TypeScript 的内置工具类型 Extract 有什么作用?

前端 TypeScript 面试题, TypeScript 的内置工具类型 Extract 有什么作用?

QA

Step 1

Q:: TypeScript 的内置工具类型 Extract 有什么作用?

A:: TypeScript 的内置工具类型 Extract 用于从一个类型中提取另一个类型。具体来说,Extract<T, U> 会从类型 T 中提取出可以赋值给类型 U 的所有子类型。这个工具在处理联合类型时非常有用,可以帮助我们过滤出我们关心的子类型,从而简化类型判断和类型推断的工作。例如:

 
 type T = Extract<'a' | 'b' | 'c', 'a' | 'f'>; // T 是 'a' 
 

Step 2

Q:: 如何在 TypeScript 中使用 Extract 实现类型的过滤?

A:: 在 TypeScript 中,你可以使用 Extract 实现对联合类型的过滤。例如,如果你有一个联合类型 type A = 'a' | 'b' | 'c',你想从中提取出能够赋值给另一个联合类型 type B = 'a' | 'x' 的类型,你可以这样做:

 
 type Result = Extract<A, B>; // Result 类型为 'a'
 

这种用法能够显著减少类型判断的复杂性。

Step 3

Q:: TypeScript 工具类型 Extract 的应用场景有哪些?

A:: TypeScript 中的 Extract 工具类型主要用于类型系统的精确控制,特别是在处理复杂类型时。例如: 1. 权限管理:在权限系统中,将某个角色的权限类型与全局权限类型进行比较,提取该角色特有的权限。 2. 表单数据处理:从表单数据类型中提取与特定条件匹配的字段类型。 3. API 类型设计:在设计 API 的响应类型时,可以从某个通用类型中提取出特定的子类型用于不同的 API 端点。

用途

面试这个内容主要是为了考察候选人对 TypeScript 高级类型系统的理解以及对工具类型的实际应用能力。在实际生产环境中,Extract 类型常用于从复杂的联合类型或对象类型中提取出符合条件的子类型,这在开发大型项目时尤为重要。使用 Extract 可以减少类型定义的重复性,提高代码的可维护性,并确保类型安全性。\n

相关问题

🦆
TypeScript 内置工具类型 Omit 有什么作用?

Omit<T, K> 类型用于从类型 T 中排除指定的键 K,并创建一个新的类型。例如:

 
type Person = { name: string; age: number; location: string; }
type PersonWithoutLocation = Omit<Person, 'location'>; // { name: string; age: number; }
 
🦆
如何使用 TypeScript 的内置工具类型 Exclude?

Exclude<T, U> 用于从类型 T 中排除所有可以赋值给类型 U 的类型。例如:

 
type T = 'a' | 'b' | 'c';
type Excluded = Exclude<T, 'a' | 'b'>; // 'c'
 
🦆
Partial 和 Required 有什么区别?

Partial<T> 会将类型 T 的所有属性变为可选,而 Required<T> 则会将类型 T 的所有属性变为必选。例如:

 
type Person = { name: string; age?: number; };
type PartialPerson = Partial<Person>; // { name?: string; age?: number; }
type RequiredPerson = Required<Person>; // { name: string; age: number; }
 
🦆
TypeScript 的工具类型 Record 是什么?

Record<K, T> 是一种用于将 K 类型的键映射到 T 类型的对象类型。K 通常是联合类型,T 是值的类型。例如:

 
type Roles = 'admin' | 'user';
type RolePermissions = Record<Roles, string[]>; // { admin: string[]; user: string[]; }