导言:我们都知道,ts 具有类型推导,并且可以很好的进行智能的类型推导。但是如果我们想要手动的来进行类型推导 —— 通过已知的类型来推断另一个类型,那么这个需要怎么做呢?
关键字
主要的关键字有以下几个:
typeof
,in
,keyof
等关键字
typeof
关键字
大家看到typeof, 肯定会说 js 中已经存在了哇,但是ts 中的typeof 有不一样的用法:
获取某个数据的类型
, 上面的c 的类型是b的变量,这个b又是const
定义的(const 和 let 定义的区别在于 const 定义常量, let 定义变量,详细)常量的值一般在声明的时候就要赋值,所以b 的类型不是string, 而是一个字面量
:解决方法:
由上面的这个小例子,我们可以得出:TS中的typeof,书写的位置在类型约束的位置上。表示:获取某个数据的类型 但是typeof 作用于类的时候,确实一个类的构造函数
。
keyof
关键字
作用于
类
、接口
、类型别名
,用于获取其他类型中的所有成员名组成的联合类型
获取多个级联类型的交集
如果没有交集的话,会类型推导出一个
never
类型
获取多个级联类型的并集
in
关键字
该关键字往往和
keyof
联用,限制某个索引类型
的取值范围
。
TS中预设的类型演算
Partial<T>
将类型T中的成员变为可选
样列
原理分析
/**
* Make all properties in T optional
*/
type Partial<T> = {
[P in keyof T]?: T[P]; // 使用泛型,把每一个属性都加上了可选的符号
};
required<T>
将类型T中的成员变为必填
样列
原理分析
/**
* Make all properties in T required
*/
type required<T> = {
[P in keyof T]-?: T[P]; // 这里的 - 号是去除条件
};
Readonly<T>
将类型T中的成员变为只读
样列
源码分析
/**
* Make all properties in T readonly
*/
type Readonly<T> = {
readonly [P in keyof T]: T[P]; // 就是在前面加了一个修饰符
};
Exclude<T, U>
从T中剔除可以赋值给U的类型。
样例
源码分析
/**
* Exclude from T those types that are assignable to U
*/
type Exclude<T, U> = T extends U ? never : T; // 通过继承来实在U 包含 T
Extract<T, U>
提取T中可以赋值给U的类型。
样例
源码分析
/**
* Extract from T those types that are assignable to U
*/
type Extract<T, U> = T extends U ? T : never; // 和上面的exclude 相反的
NonNullable<T>
从T中剔除null和undefined。
样例
源码分析
/**
* Exclude null and undefined from T
*/
type NonNullable<T> = T extends null | undefined ? never : T;
ReturnType<T>
获取函数返回值类型。
样例
-方式一:
- 方式二:
InstanceType<T>
获取构造函数类型的实例类型。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。