用法
T extends U ? X : Y
条件类型使用 infer
type F<T> = T extends Array<infer K> ? K : T;
// string
type S = F<string[]>;
// boolean
type B = F<boolean>;
type PromiseFun<T> = T extends (...args: infer P) => infer K
?
(...args: P) => Promise<K>
:
T;