如果在泛型<>中使用就是表示泛型约束 比如 <T extends Record<string,any>>表示的是传入的泛型 T 必须是属性是字符串,值任意类型的对象
如果 extends 紧跟泛型后面就表示条件类型,T 继承 U 那么结果就是 X 类型,否则就是 Y 类型
1
typeTest<T, U, V> = T extendsRecord<string, string> ? U : V;
infer
infer 表示在 extends 条件语句中待推断的类型变量
1
typeParamType<T> = T extends (arg: infer P) => any ? P : T;
在这个条件语句 T extends (arg: infer P) => any ? P : T 中,infer P 表示待推断的函数参数。 整句表示为:如果 T 能赋值给 (arg: infer P) => any,则结果是 (arg: infer P) => any 类型中的参数 P,否则返回为 T。