终结理解TypeScript关键字之infer

245 阅读1分钟

推断 + 解包 !!!

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代替解包出来的类型(俗称类型编程也可以理解为变量!!!)