typescript速查文档

typescript 内置实用类型
联合类型/或 : type a = string | number
获取值的类型 : type a = typeof 标识符
表示值的类型不会变化 : let a = [1, 2] as const
获取索引的类型 : type k = keyof {a:1,b:2} => k === "a" | "b"
映射类型 :如下操作中 k2 就是 k 的映射类型。这里 k2 与 k 是一样的,但 k2 的定义我们有操作空间可以进行改造
typescript
type k = {a:1,b:2} type k2 = { [key in keyof k] : k[key] }
{: id="20210118141006-uaruzc4"}
条件类型ts体操万恶之源):与 "(20210118140957-dfjko4e "映射类型"") 结合起来可以实现非常有用的一些操作
type k<T> = T extends U ? X : Y T 如果可以分配 给 U 则返回 X 否则返回 Y
实例:type k<T> = T extends number ? string : boolean
可以通过下面这样的条件来筛选联合类型
type a = string | number type k = T extends string ? never : T type b = k // number
推断 infer :只能使用在条件类型type k<T> = T extends infer R ? R : boolean 这里使用推断返回了 T 自身,但 infer 更多的是用于获取 T 中的某一部分的类型,例如 T 是一个函数的时候 type k<T> = T extends (...arg)=>infer R ? R : T 这里利用 infer 获取 T 的返回值的类型

类型保护 缩小类型范围(我认为这样描述更形象贴切)

in , typeof , instanceof 这三个操作符 ts 都可以自动推断排除操作结果为假的类型
typescript
if("swim" in pet){// 还可以改成 pet.swim ,typeof 也有缩小类型范围的功能 // 在这个范围内 pet 的类型被确认为 Fish 了 }
自定义类型保护:
typescript
function isFish(pet: Fish | Bird): pet is Fish { return (pet as Fish).swim !== undefined; }