今天来讲讲typeScript中的常用内置工具类型,使得我们在定义类型时减少不必要的代码,虽然都能通向罗马,但是能方便为什么不方便呢?TS的内置工具类型能达到事半功倍的效果。
正文
Pick
- 从给定的类型中选择部分属性,创建一个新的类型
可以方便地从一个复杂的类型中选择需要的属性,不必手动复制和定义一个新的类型。这在许多情况下可以简化代码并增强代码的可读性
//定义
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
比如用户的接口,身上有着许多的字段,但是我们编辑的时候只需要返回我们需要的部分字段,我们可以重新定义一个类型但是EditUser和EditUserOne是一样的。一个类型定义还好,要是数量上来了写类型定义都写烦躁了。
type User = {
id: string,
name: string,
age: number,
grade: number
userAvatarUrl: string
openId: string,
userGroup: string,
}
type EditUser = Pick<User, 'name' | 'age' | 'id' | 'userAvatarUrl'>
//与EditUser类型一样
type EditUserOne = {
id: string,
name: string,
age: number,
userAvatarUrl: string
}
Omit
- 从给定的类型中排除指定的属性,创建一个新的类型
跟上面的Pick恰恰相反,根据具体的情况来决定使用选择还是排除
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
EditUserTwo和EditUser是一样的
type User = {
id: string,
name: string,
age: number,
grade: number
userAvatarUrl: string
openId: string,
userGroup: string,
}
type EditUserTwo = Omit<User, 'grade' | 'openId' | 'userGroup'>
type EditUser = Pick<User, 'name' | 'age' | 'id' | 'userAvatarUrl'>
Record
- 将给定的键类型映射到指定的值类型
type Record<K extends keyof any, T> = { [P in K]: T; };
含义可能不好理解,看运用。比如用在性别枚举中
enum GENDER {
MAN = 1,
WOMAN = 0
}
type GENDER_MAP = Record<GENDER, string>
let condition: GENDER_MAP = {
[GENDER.MAN]: '男',
[GENDER.WOMAN]: '女'
}
//男
console.log(condition[1]);
Partial
- 将给定类型的所有属性变为可选
type Partial<T> = { [P in keyof T]?: T[P]; };
interface User {
name: string,
age: number
}
type UserOne = Partial<User>
let user: UserOne = {}
结语
感兴趣可以去试试