TypeScript 高级类型
说在前面:笔者 TS 一塌糊涂,真的,就看同事代码很多看不懂,这一篇文章整理了 TS 常见的高级类型,比如说Omit
、Partial
等。
因为笔者 TS 能力是在有限,所以这边文章基本是 copy 网上的文章,只是为了增强自己的记忆点。原文链接跟参考链接放在下面:
- 原文链接: TypeScript 的所有高级类型;
- 参考链接:Utility Types;
Record<K extends keyof any, T>
- 定义
1 | type Record<K extends keyof any, T> = { |
- 作用:以 typeof 格式快速创建一个类型,此类型包含一组指定的属性,且都是必填。
- 例子:
1 | type Coord = Record<'x'|'y'|, number>; |
Partial
- 定义
1 | type Partial<T> = { |
- 作用:将类型定义的所有属性都修改为可选
- 例子
1 | interface RecordInterface { |
1 | type Coord = Partial<Record<"x" | "y", number>>; |
Required
- 定义
1 | type Required<T>{ |
- 作用:与
Partial
作用相反,把所有属性改为必填属性。
Readonly
- 定义
1 | type Readonly<T> = { |
- 作用:将所有属性定义为只读
- 例子:
1 | type Coord = Readonly<Record<"x" | "y", number>>; |
Pick<T, k extends keyof T>
- 定义
1 | type Pick<T, K extends keyof T> = { |
- 作用:从以给定的类型定义的属性中,选取指定的一组属性,返回一个新的类型
- 例子
1 | type Coord = Pick<Record<"x" | "y", number>, "x">; |
Exclude<T, U>
- 定义
1 | type Exclude<T, U> = T extends U ? never : T; |
- 作用:剔除 T 中的某个 U 类型。
- 例子:
1 | type T0 = Exclude<"a" | "b" | "c", "b">; // 'a' | 'c'; |
Extract<T, U>
- 定义
1 | type Extract<T, U> = T extends U ? T : never; |
- 作用:从 T 中提取某个属性 U, 与 Exclude 恰好相反。
Omit<T, k extends keyof any>
- 定义
1 | // 得到T中保留的属性的名字。 |
- 作用:拆除接口中指定的属性
- 例子
1 | interface InterDemo { |
NonNullable
- 定义
1 | type NonNullable<T> = Exclude<T, null | undefined>; |
- 作用:过滤掉联合类型中的
null
和undefined
- 例子
1 | type T1 = NonNullable<number | null>; // numberl |
Parameters<T extends (…args: any) => any>
- 定义:
1 | type Parameters<T extends (...args: any) => any> = T extends ( |
- 作用:获取函数的全部参数类型,以元组类型返回
- 例子:
1 | type F1 = (a: string, b: number)=>void; |
ConstructorParameters<T extends new (…args: any)=>any>
- 定义
1 | type ConstructorParameters<T extends new (...args: any) => any = T extends new (...args: infer P) => any ? P :never; |
- 作用:获取构造函数的全部参数
- 例子
1 | interface IEntity { |
ReturnType<T extends (…args: any)=>any>
- 定义
1 | type ReturnType<T extends (...args: any) => any> = T extends ( |
- 作用:接受函数声明,返回函数的返回值类型,如果多个类型则以联合类型返回
- 例子
1 | type F1 = () => Date; |
InstanceType<T extends new (…args: any)=>any>
- 定义
1 | type InstanceType<T extends new (...args: any) => any> = T extends new ( |
- 作用:获取 构造函数 的返回类型,如果是多个就以 联合类型 的方式返回,我们借用上面的定义:
- 例子
1 | interface IEntity { |
ThisParameterType
- 定义
1 | type ThisParameterType<T> = T extends (this: infer U, ...args: any[]) => any ? U : unknown; |
- 作用:获取函数中
this
的数据类型,如果没有返回unknown
类型 - 例子
1 | interface Foo { |
OmitThisParameter
- 定义
1 | type OmitThisParameter<T> = unknown extends ThisParameterType<T> ? |
作用:移除函数中的
this
数据类型:例子
1 | interface Foo { |