TypeScript 类型体操通关秘籍(一)
Table of Contents
TypeScript 类型系统中的一些类型运算。
条件运算 extends ? :
ts 为图灵类型完备的类型系统,具有类型计算功能。extends
相当于 js 中的三元运算符。
type isTwo<T> = T extends 2 ? true: false;
type res = isTwo<1>; // false
type res2 = isTwo<2>; // true
推导 infer
infer
后面的泛型表示待推导的类型。
type First<Tuple extends unknown[]> = Tuple extends [infer T,...infer R] ? T : never;
type res = First<[1,2,3]>; // 1
交叉 &
对两种类型取交集,没有交集则为 never
。
type ObjType = {a: number } & {c: boolean}; // { a: number; c: boolean }
type res = 'aaa' & 222; // never
类型映射
type MapType<T> = {
[Key in keyof T]?: T[Key]
}
keyof T
是查询索引类型中所有的索引,叫做索引查询。T[Key]
是取索引类型某个索引的值,叫做索引访问。
一个集合映射到另一个集合,叫做类型映射。使用 as
运算符,可以做到重映射。
type MapType<T> = {
[Key in keyof T as `${Key & string}${Key & string}${Key & string}`]: [T[Key], T[Key], T[Key]]
}
Key
默认可能是 string
、number
、symbol
这三种,所以要和 string
取交叉部分。
完。