文章插图
TypeScript是一种静态类型检查的编程语言,它内置了许多基本数据类型,如字符串、数字和布尔型等 。除了基本数据类型,当某种类型对于大多数代码来说都非常有用时,它们就会被添加到TypeScript中并且被大家使用而无需担心它们的可用性 。这些内置在TS中的类型我们称之为工具类型,这些工具类型位于TS安装目录typescript/lib/lib.es5.d.ts,熟悉这些工具类型,可以帮助我们提高开发效率 。
Partial<T>、Required<T> 与 Readonly<T>该组工具类型为改操作的工具类型,具体为将类型T的所有属性都改为可选、必选或只读 。
定义:
/** * Make all properties in T optional */type Partial<T> = {[P in keyof T]?: T[P];};/** * Make all properties in T required */type Required<T> = {[P in keyof T]-?: T[P];};/** * Make all properties in T readonly */type Readonly<T> = {readonly [P in keyof T]: T[P];};
知识点:in:关键字,用来实现遍历;
keyof:关键字,索引类型查询,用来获取类型的所有键,返回的类型是联合类型;
?:修饰符,表示可选属性;
readonly:修饰符,表示只读属性;
-:修饰符,添加在“?”或"readonly"修饰符之前,表示移除“?”或"readonly"修饰符 。
作用:
Partial,将T类型中的所有属性变为可选属性; Required,将T类型中的所有属性变为必选属性; Readonly,将T类型中的所有属性变为只读属性 。
应用:
interface Text {size: numbercolor: string}type T = Partial<Text>type R = Required<Text>type O = Readonly<Text>
新定义的T类型中的属性均为Text类型属性,且均为可选;新定义的R类型中的属性均为Text类型属性,且均为必选;新定义的O类型中的属性均为Text类型属性,且均为只读 。Record<K,T>该类型可视作增操作相关的工具类型,根据我们指定的键值类型,新增一个对象类型 。
定义:
/** * Construct a type with a set of properties K of type T */type Record<K extends keyof any, T> = {[P in K]: T;};
知识点:keyof any:上面介绍过keyof(关键字,用来获取类型的所有键,返回的类型是联合类型),当对any使用keyof索引类型查询时,结果类型为固定的联合类型“string | number | symbol”;
K extends keyof any:泛型约束,定义了类型K的最大范围为联合类型“string | number | symbol” 。
作用:
根据给定的属性名类型和属性类型创建一个新的对象类型 。
应用:
type K = 'size'|'color'type T = numbertype R = Record<K, T>
新定义的R类型,包括属性size和color,且类型均为number 。Exclude<T,U> 与 Extract<T,U>该组类型可以视作查操作相关的工具类型,查出T类型中与U类型无关的属性或相关的属性 。
定义:
/** * Exclude from T those types that are assignable to U */type Exclude<T, U> = T extends U ? never : T;/** * Extract from T those types that are assignable to U */type Extract<T, U> = T extends U ? T : never;
知识点:T extends U ? X : Y:条件类型,extends是关键字,若类型T能够赋值给类型U,则条件类型的结果为类型X,否则为类型Y 。
作用:
【一看就懂的TypeScript工具类型】根据条件类型的定义,Exclude类型中若T类型中的属性存在于U类型,则返回never,也就是从类型T中剔除所有类型U的属性 。Extract则恰恰和Exclude相反,返回类型T和类型U的交集 。
应用:
interface Text {size: numbercolor: string}interface Img {width: numbercolor: string}type T = Exclude<Text,Img>type R = Extract<Text,Img>
新定义的T类型,只有size属性;新定义的R类型,只包含color属性 。Pick<T,K>、Omit<T,K>与NonNullable该组工具类型为删操作相关的工具类型,包括剔除与指定键相关、无关或null、undefined类型操作的工具类型 。
定义:
/** * From T, pick a set of properties whose keys are in the union K */type Pick<T, K extends keyof T> = {[P in K]: T[P];};/** * Construct a type with the properties of T except for those in type K. */type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;/** * Exclude null and undefined from T */type NonNullable<T> = T extends null | undefined ? never : T;
作用:Pick类型从已有对象类型T中选取选定的属性及其类型K创建新的类型 。Omit与Pick类型相反,从已有对象类型T中剔除选定的属性及其类型K创建新的类型 。NonNullable与Omit相似,返回的结果为从T类型中剔除null and undefined类型 。
推荐阅读
- 模型越大,AI编程个性化就越难?
- 陈羽凡|仅离婚8年,白百何、陈羽凡的差距就如此之大
- “1升汽油”等于多少公斤?如果这都不了解,就别自称为老司机
- 女人愿意让你看这三个私密,其实就是把你当老公了,别傻傻不懂
- 日系车最差的地方,你们知道是什么地方吗?上一次高速就明白了
- 李小璐|李小璐遭男网红疯狂表白,放话李小璐不回复就吃屎,感情引关注
- 徐克|徐克找来肖战演郭靖就是冲着《满江红》去的,他能战胜张艺谋吗
- 蒋欣|蒋欣:我跟叶祖新在一起13年,就算全世界背叛我,他也不会
- 电影|满屏一星,李羽桐出演的盗墓大片,被观众痛骂:直接露肉就行
- |4部看一集就入坑的电视剧,越看越上头,哪部是你熬夜追的?