TypeScript 提供了一些基本的类型工具,可以帮助我们进行类型编程。
本文主要介绍 TypeScript 中 8 种常用的类型工具,包括 Partial、Pick、Record、Omit、Exclude、Required、Readonly 和 ReturnType。
Partial
Partial 工具类型可以将一个对象的所有属性变为可选属性。例如,我们有一个 Person 接口定义如下:
interface Person {
name: string;
age: number;
address: string;
}
现在我们想将 Person 对象中的所有属性都变成可选属性,可以使用 Partial 工具类型:
type PartialPerson = Partial<Person>;
这样,PartialPerson 的类型就变成了:
{
name?: string | undefined;
age?: number | undefined;
address?: string | undefined;
}
Pick
Pick 工具类型可以从一个对象中选择需要的属性。比如对于下面的 Person 接口:
interface Person {
name: string;
age: number;
address: string;
}
现在想从 Person 对象中只选择 name 和 age 属性,可以使用 Pick 工具类型:
type NameAndAge = Pick<Person, "name" | "age">;
这样,NameAndAge 的类型就变成了:
{
name: string;
age: number;
}
Record
Record 工具类型可以从一个对象中创建一个新的对象,该对象的属性和值的类型都可以自定义。比如,对于下面的 fruits 数组:
const fruits = ["apple", "banana", "orange"] as const;
现在想将 fruits 转换成一个对象,key 为 fruit 的名称,value 为 boolean 类型,可以使用 Record 工具类型:
type FruitFlags = Record<typeof fruits[number], boolean>;
这样,FruitFlags 的类型就变成了:
{
apple: boolean;
banana: boolean;
orange: boolean;
}
Omit
Omit 工具类型可以从一个对象中删除指定的属性。比如对于下面的 Person 接口:
interface Person {
name: string;
age: number;
address: string;
}
现在要从 Person 对象中删除 address 属性,可以使用 Omit 工具类型:
type NameAndAge = Omit<Person, "address">;
这样,NameAndAge 的类型就变成了:
{
name: string;
age: number;
}
Exclude
Exclude 工具类型可以从一个类型中排除指定的类型。比如对于下面的联合类型:
type Color = "red" | "blue" | "green";
现在想从 Color 类型中排除 "green",可以使用 Exclude 工具类型:
type NonGreenColor = Exclude<Color, "green">;
这样,NonGreenColor 的类型就变成了:
"red" | "blue"
Required
与 Partial 相反,Required 可以将一个类型的所有属性变为必选属性。例如,下面的 User 类型包含可选属性:
type OptionalUser = {
name?: string;
age?: number;
};
可以使用 Required工具类型将其转换为必选属性的类型:
type User = Required<OptionalUser>;
这样,User 类型就具有 name 和 age 两个必选属性:
{
name: string;
age: number;
}
Readonly
Readonly 工具类型可以将一个类型的所有属性变为只读属性。比如对于下面的 User 类型:
type User = {
name: string;
age: number;
};
我们可以使用 Readonly 工具类型将它的属性转换为只读属性的类型:
type ReadonlyUser = Readonly<User>;
这样,ReadonlyUser 的类型就成为了:
{
name: string;
age: number;
};
ReturnType
ReturnType 工具类型可以获取一个函数的返回值的类型。比如对于下面的函数:
function add(a: number, b: number) {
return a + b;
}
要得到 add 函数的类型,可以使用 ReturnType 工具类型:
type AddReturnType = ReturnType<typeof add>; // number
需要注意的是,ReturnType 只能用于函数类型,如果用于其他类型会报错。
小结
本文简单介绍了 TypeScript 中常用的8个类型工具,可以实现类型编程,做一些简单的类型体操。在编写一些复杂的类型声明时,会经常使用到这些类型工具,基于它们实现更复杂的类型。