Open fncheng opened 1 year ago
在 TypeScript 中,Record 是一个工具类型,用来创建一个由指定属性类型的对象组成的类型
type Record<K extends keyof any, T> = {
[P in K]: T;
};
其中,K 表示属性名的类型,T 表示属性值的类型。使用 Record 可以方便地定义一个对象类型,如下所示:
type User = {
id: number;
name: string;
};
type UserRecord = Record<number, User>;
const userMap: UserRecord = {
1: { id: 1, name: 'Alice' },
2: { id: 2, name: 'Bob' },
3: { id: 3, name: 'Charlie' },
};
在上面的例子中,我们使用 Record 定义了一个 UserRecord 类型,表示一组以数字为键、以 User 类型的值的对象。然后通过定义一个 userMap 对象,表示一个包含了若干个用户数据的对象。
Omit
在 TypeScript 中,
Omit
是一个专门用于构造新类型的工具类型,可以用来创建一个新类型,它去掉了给定类型中的某个属性。其语法格式如下:其中
T
表示需要被处理的类型,K
表示需要从T
类型中去掉的属性名。可以看到,Omit
类型的定义使用了Pick
工具类型和Exclude
工具类型。简单解释一下
Pick
和Exclude
工具类型:Pick<T, K>
:从类型T
中挑选出属性名为K
的属性,构造一个新的类型。Exclude<T, U>
:从类型T
中剔除属性名为U
的属性,构造一个新的类型。所以,
Omit
类型的作用就是从类型T
中排除掉属性名为K
的属性,得到一个新的类型。例如:在上面的例子中,
WithoutAddress
类型表示去掉Person
类型中的address
属性,得到的新类型。实际上,这个新类型就是拥有Person
类型的name
和age
两个属性的新类型。使用
Omit
工具类型可以方便地创建一个新类型,而无需重新定义接口或类型别名,提高代码的可读性和可维护性。extends keyof
extends keyof 是一个组合使用的语法,它表示某个泛型类型参数必须是某个类型中的键名。