前端 TypeScript 面试题, TypeScript 的内置工具类型 Required 有什么作用?
前端 TypeScript 面试题, TypeScript 的内置工具类型 Required 有什么作用?
QA
Step 1
Q:: TypeScript 的内置工具类型 Required 有什么作用?
A:: TypeScript 中的 Required<T> 是一个内置的泛型工具类型。它的作用是将某个类型 T 的所有属性变为必选属性。这意味着使用 Required<T>
后,类型 T 中所有可选的属性都会变为必选属性。例如,假设有一个接口类型 interface Person { name?: string; age?: number; }
,使用 Required<Person>
后,name
和 age
都会变成必选的。
Step 2
Q:: Required 和 Partial 的区别是什么?
A:: Required 和 Partial 都是 TypeScript 的内置工具类型,但它们的作用相反。Required<T> 将某个类型 T 中的所有属性变为必选,而 Partial<T>
则将某个类型 T 中的所有属性变为可选。例如,Partial<Person>
会将 Person
类型中的所有属性变为可选,而 Required<Person>
会将它们都变为必选。
Step 3
Q:: TypeScript 的工具类型有哪些?请简要说明。
A:: TypeScript 提供了多个常用的工具类型,包括但不限于:
- Required<T>
:将类型 T 的所有属性设为必选。
- Partial<T>
:将类型 T 的所有属性设为可选。
- Readonly<T>
:将类型 T 的所有属性设为只读。
- Pick<T, K extends keyof T>
:从类型 T 中选择一些属性构成一个新的类型。
- Omit<T, K extends keyof any>
:从类型 T 中排除一些属性构成一个新的类型。
- Record<K extends keyof any, T>
:构造一个类型,其属性名是 K,属性值类型是 T。
- Exclude<T, U>
:从类型 T 中排除可以赋值给类型 U 的那些类型。
- Extract<T, U>
:从类型 T 中提取可以赋值给类型 U 的那些类型。
- NonNullable<T>
:从类型 T 中排除 null 和 undefined。
Step 4
Q:: 如何自定义一个类似 Required 的工具类型?
A:: 可以使用 TypeScript 的映射类型来自定义一个类似 Required 的工具类型。例如,以下代码定义了一个 MyRequired<T>
,该类型将类型 T 中的所有属性设为必选:
type MyRequired<T> = {
[P in keyof T]-?: T[P];
};
其中 -?
是用于移除可选标志的符号。