infer的定义:infer 表示在extends条件语句中以占位符出现的等到使用时才推断出来的数据类型。
如
interface Customer {
custname: string
buymoney: number
}
type CystFn = (params: Customer) => string;
// type CustParaTyp = CustFn extends (params: infer P) => number? P : CustFn;
type ParamsTyp<T> = T extends (params: any) => infer R ? R : never;
type CustParaTyp = ParamsTyp<CustFn>
type EleofArr<T> = T extends Array<infer P> ? P : never;
type EleofArrTest = EleOfArr<Array<{name: string, age: number}>>
infer 进阶
下面是vue中一小段infer 的使用源码
export function unref<T>(ref:T):T extends Ref<infer V> ? V : T {
return inRef(ref) ? (ref.value as any)
}
unref(ref(3)) // 返回类型为 number
unref(ref('111')) // 返回类型为 string
unref(ref({username: 'zhangsan'})) // 返回类型为 {username: 'zhangsan'}