theydy / notebook

记录读书笔记 + 知识整理,vuepress 迁移中 https://theydy.github.io/notebook/
0 stars 0 forks source link

typescript 类型 #20

Open theydy opened 3 years ago

theydy commented 3 years ago

在线测试环境

https://www.typescriptlang.org/play?ts=4.1.0-pr-40336-88#code/Q

内置类型

Partial : 将 T 所有字段变为可选

type Partial<T> = { [P in keyof T]?: T[P] | undefined; }

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> : 从 T 中过滤出属性 K

type Pick<T, K extends keyof T> = { [P in K]: T[P]; }

Omit<T, K> : 从 T 中移除属性 K

type Omit<T, K extends string | number | symbol> = { [P in Exclude<keyof T, K>]: T[P]; }

Record<K, T> : 标记对象 key [K] value [T] 类型

type Record<K extends string | number | symbol, T> = { [P in K]: T; }

Exclude<T, U> : 取 T, U 两者的不相交的属性

type Exclude<T, U> = T extends U ? never : T

// 'b' | 'c'

type A = Exclude<'a' | 'b' | 'c' | 'd' , 'b' | 'c' | 'e' >

Extract<T, U> : 取 T, U 两者的交集属性

type Extract<T, U> = T extends U ? T : never

NonNullable : 排除 T 的 null | undefined 属性

type NonNullable<T> = T extends null | undefined ? never : T

Parameters : 获取 T 函数的所有参数类型

type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never

ConstructorParameters : 获取 T 类的构造函数的所有参数类型

type ConstructorParameters<T extends new (...args: any) => any> = T extends new (...args: infer P) => any ? P : never

ReturnType : 获取 T 函数返回值的类型

type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any

InstanceType : 获取 T 类的实例类型

type InstanceType<T extends new (...args: any) => any> = T extends new (...args: any) => infer R ? R : any