You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
type NonNullable<T> = T extends null | undefined ? never : T
用法示例:
type T0 = NonNullable<string | number | undefined>;
// 结果
type T0 = string | number
十、infer 关键词
typescript2.8 新出的语法
在条件语句中作为待推断的类型变量,推断返回值类型
可以将元组变成联合类型
理解好这个用法, Parameters, ReturnType 等内置类型的实现 都用到这个
用法示例:
示例1:
type Foo<T> = T extends { a: infer U; b: infer U } ? U : never;
type T1 = Foo<{ a: string; b: string }>; // T1类型为 string
type T2= Foo<{ a: string; b: number }>; // T1类型为 string | number
示例2:元组变联合类型
type I3 = [string,number]
type Tg<T> = T extends (infer R)[] ? R : never
type T4 = Tg<I3>;// T4类型为: string|number
十一、Parameters<T>:获取函数参数类型
源码实现:
type Parameters<T extends (...args:any) => any> = T extends (...args: infer P) => any ? P:never
typescript除了一些常用的
typeof
获取一个变量或对象的类型、keyof
遍历类型的属性等外,还提供了很多实用内置的类型,大家安装typescript 的时候,可以在node-module/typescript/lib/文件下面有对js 所有的声明文件,包含es5,es6...到最新的esnext 版本,本篇主要是总结一下对typescript 实用内置类型的笔记,比如 官方文档给出的这些:Exclude<T, U>
:从T中剔除可以赋值给U的类型。Extract<T, U>
:提取T中可以赋值给U的类型。NonNullable<T>
:从T中剔除null和undefined。ReturnType<T>
:获取函数返回值类型。InstanceType<T>
:获取构造函数类型的实例类型。TypeScript官方在线运行:https://www.typescriptlang.org/zh/play
一、
Required<T>
:将所有属性类型转为必选属性类型源码实现:把问号减去
用法示例:本来User 的属性类型都是可选的,现在变成必选了
二、
Partial<T>
:将所有类型转为可选类型源码实现:把问号加上
用法示例
三、
Readony<T>
: 将所有属性类型转为只读属性选项类型源码实现: 在属性key 前面加readonly 关键词
用法示例:
四、
Pick<T, K>
:从 T 中筛选出 K (大类型中挑选小类型)源码实现:
用法示例:
五、
Record<T, K>
: 将K中所有属性值转化为T类型源码实现:
用法示例:
六、
Exclude<T, U>
: 用于从类型T中去除不在U类型中的成员,(T中有,U中没有)源码实现:用条件类型实现
用法示例:
七、
Extract<T, U>
:Exclude 的反操作,(取 T U 两者的交集属性)源码实现: 条件类型实现
用法示例:
八、
Omit<T, K>
:从类型 T 中 除去指定属性类型 K源码实现: 利用
pick
+Exclude
结合实现K extends keyof T
说明这个类型值必须为T类型属性的子集。假如有一个interface定义如下:
在传入这个Student到Pick中时
在上面的Omit实现中,我们用到了Exclude这个条件类型,根据上文中的说明,Exclude的效果就是寻找在keyof T中有,但在K类型中没有的成员,这样就将剩余的类型过滤了出来,再去应用Pick,就获得了我们的Omit实现。
用法示例:
九、
NonNullable<T>
:从 T 中剔除 null,underfined 类型源码实现:
用法示例:
十、
infer
关键词用法示例:
十一、
Parameters<T>
:获取函数参数类型源码实现:
用法示例:
十二、
ReturnType
:获取函数返回值类型源码实现
用法示例:
十三、
ConstructorParamters
:获取构造函数的参数类型源码实现:
用法示例:
十四、
InstanceType
:获取构造函数类型的实例类型(获取一个类的返回类型)源码实现:
The text was updated successfully, but these errors were encountered: