这是我参与2022首次更文挑战的第34天,活动详情查看:2022首次更文挑战
条件类型
条件类型类似于JavaScript中的三元表达式一样,不过需要extends关键字。如果X是一个裸类型参数,那么可以称为分布式条件类型。裸类型指的是外部没有任何装饰的类型参数。而且不是复合类型的组成部分是独立出现的。当X是联合类型,那么分布式条件类型会被展开。never是尾端类型,是其他类型的子类型,如果never类型和其他类型使用时,可以直接将never类型从联合类型中去除掉。
X extends Y ? Z : U
分布式条件类型转为非分布式条件类型可以将分布式条件类型中的裸类型参数修改为非裸类型参数,通过将extends两侧类型包裹在元组类型中去实现。或者通过例子中的方法。在extends语句中类型的位置上可以使用infer关键字可以推断类型变量,但是推断的类型变量只允许在条件类型的true分支中去使用。在多个infer声明中也可以定义不同的推断类型变量。
type XY[Y] = [Y] extends [string] ? true : false;
常用工具类型
Partial<X>工具类型可以将实际类型参数X中的所有属性变为可选属性。Reqired<X>可以将实际参数X中所有属性变为必选属性。Readonly<X>可以将实际参数X中所有属性变为只读属性。Exclude<X, Y>工具类型可以从类型X中剔除所有可以赋值给类型Y的类型。NonNullable<X>工具类型可以从类型X中剔除null类型和undefined类型并且构造一个新类型。Parameters<X>工具类型能够获取函数类型X的参数类型并使用参数类型构造一个元组类型。OmitThisParameter<X>工具类型从类型X中剔除this参数类型,并且构造一个新类型。
类型查询和类型断言
typeof能够获取操作数的数据类型。断言语法<X>expr中X表示类型断言的目标类型。后面跟着表达式。使用断言时,需要注意运算符的优先级。as T类型断言和<X>类型断言功能相同。as是关键字,T表示类型断言的目标类型。类型断言不允许在两个类型之间随意做转换而是需要满足expr表达式的类型能够赋值给X类型或者X类型能够赋值给expr表达式的类型。断言中如果既能使用unknown又能使用any类型。我们优先使用unknown类型,因为unknown类型是更加安全的顶端类型。