TypeScript Utility Types - Partial: TypeScript 实用类型 - Partial

Partial<Type> 可将一个类型中所有属性转换为可选属性。假设我们有一个 user 的类型,如下:

1
2
3
4
5
type User = {
name: string;
age: number;
gender: string;
};

Partial<Type> 转换后得到:

1
2
3
4
5
6
7
8
9
type PartialUser = Partial<User>;
const partialUser: PartialUser = {
/** `name` 属性是可选的 */
name: "Olive",
/** `age` 属性是可选的 */
age: 18,
/** `gender` 属性是可选的 */
gender: "female",
};

转换后的 PartialUser 类型与下面的类型是等价的:

1
2
3
4
5
type PartialUser = {
name?: string | undefined;
age?: number | undefined;
gender?: string | undefined;
};

那么 Partial<Type> 是如何转换类型的呢?下面是它的源码:

1
2
3
4
5
6
/**
* Make all properties in T optional
*/
type Partial<T> = {
[P in keyof T]?: T[P];
};
  • 遍历类型 T,将类型 T 中的属性作为 key;
  • 在属性后面加 ? 使其变为可选的属性;
  • 可选属性的值为 T 类型中对应属性的值,即 T[P]

Playground Link