共计 1121 个字符,预计需要花费 3 分钟才能阅读完成。
泛型
TypeScript 泛型介绍
介绍官网说的很具体了,其实泛型就是 对类型进行 编程的货色,一点也不简单,会写代码函数的都很好了解。
想学好泛型,只须要把握两点基础知识即可:
- keyof 获取应用
- in 遍历应用
哦,还有一个 泛型束缚,要害语法 extends
基础知识介绍
先定义一个 接口 interface 如下:
interface IUser {
id: number;
name: string;
age?: number;
info?: string;
}
接下来 介绍 keyof 的应用,先用 keyof 获取接口 IUser 的所有属性,如下:
type IUserKeys = keyof IUser;
而后 介绍 in 的应用,用来遍历属性,如下:
type IKeys = {[P in keyof IUser]: IUser[P]
}
简略吧,就像写 最简略的程序一样,好,接下来进入正题,咱们剖析一下 typescript 内置的几种罕用类型工具。
预置类型
-
Partial<T>
就是把 一个接口的属性都变成 可选的,利用下面的 keyof 和 in 加上 可选操作符间接实现就行,如下:type Partial<T> = {[P in keyof T]?: T[P]; };
-
Required<T>
所有属性设置成 必填的,和下面同理,去掉可选操作符即可:type Required<T> = {[P in keyof T]-?: T[P]; };
-
Readonly<T>
把属性设置成 只读,同理,增加 readonly 修饰符即可:type Readonly<T> = {readonly [P in keyof T]: T[P]; };
下面这三个都很简略,很好了解吧?接下来实现一些略微简单的,当然也不难
-
Pick<T, K>
含意就是,选取接口中的 部门类型。这里有个 关键点就是 这部分 必须 在接口中存在,所以须要 加上 泛型束缚,实现就是 利用 extends 关键词,示意 K 被 (keyof T)束缚, 如下:type Pick<T, K extends keyof T> = {[P in K]: T[P]; };
-
Record<K, T>
含意就是把 属性 K 的类型设置成 T 类型,遍历 K,设置为 T 即可。type Record<K extends keyof any, T> = {[P in K]: T; };
-
Exclude<T, U>
含意就是 从 T 中剔除不想要的 U 局部,比方 ‘a’ | ‘b’ | ‘c’,剔除 ’c’:type Exclude<T, U> = T extends U ? never : T;
-
Qmit<T, K>
结构一个 T 类型接口,然而要从中排除 K 中的属性。这个须要思考一下,间接说实现思路 就是利用 Pick 筛选想要的属性,而后 想要的属性 通用 Exclude 把 K 中的来排除掉来获取。type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;