infer 类型推导

ts的所有内置类型都是基于 inferextends+分发、in keyof 来实现的

extends: 约束
infer: 推导
typeof: 将值转成类型
所有的内置类型都是基于infer来实现的 infer是固定写法.

例如: 想要推导函数的返回值类型, 可以用内置类型ReturnType<T>这个来实现.

  1. function getSchool(name:string,age:name,address:string){
  2. return {name, age, address}
  3. }

可以使用ReturnType<T>来动态获取返回值类型:

  1. type GetSchoolReturn = ReturnType<typeof getSchool>

此时的GetSchoolReturn就是

  1. { name:string, age:name, address:string }

将元祖转化成联合类型 怎么做?

[string, number, boolean] => string | number | boolea

  1. type typingArr = [string, number, boolean]
  2. type ToUnion = Transfer<typingArr>
  3. type Transfer<T> = T extends Array <infer A> ? A : never

联合类型转化成元祖?

string | number | boolea => [string, number, boolean]

  1. // TODO

类型保护