infer 类型推导
ts的所有内置类型都是基于 infer
和 extends
+分发、in keyof
来实现的
extends
: 约束infer
: 推导typeof
: 将值转成类型
所有的内置类型都是基于infer
来实现的 infer
是固定写法.
例如: 想要推导函数的返回值类型, 可以用内置类型ReturnType<T>
这个来实现.
function getSchool(name:string,age:name,address:string){
return {name, age, address}
}
可以使用ReturnType<T>
来动态获取返回值类型:
type GetSchoolReturn = ReturnType<typeof getSchool>
此时的GetSchoolReturn
就是
{ name:string, age:name, address:string }
将元祖转化成联合类型 怎么做?
[string, number, boolean] => string | number | boolea
type typingArr = [string, number, boolean]
type ToUnion = Transfer<typingArr>
type Transfer<T> = T extends Array <infer A> ? A : never
联合类型转化成元祖?
string | number | boolea => [string, number, boolean]
// TODO