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 的定义我们有操作空间可以进行改造

type k = {a:1,b:2}

type k2 = {
  [key in keyof k] : k[key]
}

{{{
条件类型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> = T extends string ? never : T

type b = k<a> // 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 都可以自动推断排除操作结果为假的类型

if("swim" in pet){// 还可以改成 pet.swim ,typeof 也有缩小类型范围的功能
//  在这个范围内 pet 的类型被确认为 Fish 了
}

自定义类型保护:

function isFish(pet: Fish | Bird): pet is Fish {
     return (pet as Fish).swim !== undefined;
}

by 崮生 from 崮生 • 一些随笔 🎨,欢迎 赞助本文
本文欢迎分享与聚合,全文转载未经授权( 联系我)不许可。