推断 + 解包 !!!
Case1
namespace AA {
type C<T> = T extends () => number ? number : any
type T1 = () => number
type T2 = () => string
type R = C<T1> //number
type R1 = C<T2> //any
}
类型(函数)并且返回值相同才为
true
type ReturnFunType<T> = T extends () => infer R ? R : any
type T1 = () => string
type T2 = string
type A = ReturnFunType<T1> // string
type B = ReturnFunType<T2> // any
-
把
T理解为占位符 -
infer R理解 : 要想T extends () => infer R成立 !!!需要满足两个条件:T是函数类型并且两个函数返回值类型相同,infer关键字有两层含义 1.推断出这两个函数的返回值类型一定一致,不然条件不会成立! 2. 把返回值类型解包出来用占位符R代替解包出来的类型(俗称类型编程也可以理解为变量!!!)