infer
type ParamType<T> = T extends (...args: infer P) => any ? P : T;
- 如果
T
能赋值给(...args: infer P) => any
, 结果是(...args: infer P) => any
否则返回T
interface User {
name: string;
age: number;
}
type Func = (user: User) => void;
type Param = ParamType<Func>;
type AA = ParamType<string>;
in 遍历数组
const tuple = ['tesla', 'model 3', 'model X', 'model Y'] as const
type result = TupleToObject<typeof tuple>
type TupleToObject<T extends ReadonlyArray<string | number>> = {
[p in T[number]]: p
}
type arr1 = ['a', 'b', 'c']
type arr2 = [3, 2, 1]
type head1 = First<arr1>
type head2 = First<arr2>
type First<T extends any[]> = T extends [] ? never : T[0]
type First<T extends any[]> = T['length'] extends 0 ? never : T[0]
type First<T extends any[]> = T extends [infer P, ...infer Rest] ? P : never