📅  最后修改于: 2023-12-03 14:48:05.154000             🧑  作者: Mango
在 TypeScript 中,我们很常见到需要将多个类型进行合并或交叉的情况,为了方便,我们可以使用 TypeScript 的实用程序类型进行快速操作。
Partial 可以将一个类型中所有的属性变为可选的,使用范例如下:
interface Person {
name: string;
age: number;
}
type PartialPerson = Partial<Person>;
// 等价于
interface PartialPerson {
name?: string;
age?: number;
}
在上述例子中,我们可以看到 Partial 的作用是将 Person 中的属性变成可选属性。
相对于 Partial,Required 则可以将一个类型中所有的可选属性变成必选属性,使用范例如下:
interface Person {
name?: string;
age?: number;
}
type RequiredPerson = Required<Person>;
// 等价于
interface RequiredPerson {
name: string;
age: number;
}
Readonly 可以将一个类型中所有的属性变成只读的,使用范例如下:
interface Person {
name: string;
age: number;
}
type ReadonlyPerson = Readonly<Person>;
// 等价于
interface ReadonlyPerson {
readonly name: string;
readonly age: number;
}
在上面的例子中,我们可以看到 Readonly 将 Person 中的所有属性都变成了只读的。
Record 可以将一个类型中的每个属性都映射成一个指定的类型,使用范例如下:
type Person = 'Tom' | 'Bob' | 'Alice';
type Age = number;
type RecordPerson = Record<Person, Age>;
/*
等价于
interface RecordPerson {
Tom: number;
Bob: number;
Alice: number;
}
*/
这里我们将每个人名都映射成了一个年龄。
Pick 可以从一个类型中选择出指定的属性构造一个新类型,使用范例如下:
interface Person {
name: string;
age: number;
gender: string;
}
type NameAndAge = Pick<Person, 'name' | 'age'>;
// 等价于
interface NameAndAge {
name: string;
age: number;
}
在上述的例子中,我们从 Person 中选择了 name 和 age 两个属性构造出了一个新类型。
Omit 可以从一个类型中移除指定的属性构造一个新类型,使用范例如下:
interface Person {
name: string;
age: number;
gender: string;
}
type NameAndGender = Omit<Person, 'age'>;
// 等价于
interface NameAndGender {
name: string;
gender: string;
}
在上述例子中,我们从 Person 中移除了 age 属性构造出了新类型。
总的来说,TypeScript 中的实用程序类型大大简化了我们的代码编写,使得编写代码更加高效、简洁。