infer 🧠Суть проста:
infer позволяет TypeScript вытащить конкретный тип из сложной конструкции (например, из аргументов или возвращаемого значения функции).Сделал небольшой дженерик
MyParams, который достаёт тип аргумента id:function getUser(id: number) {}
function getUser2(id: string) {}
type MyParams<T> = T extends ((id: infer R) => unknown) ? R : never;
type Test1 = MyParams<typeof getUser> // number
type Test2 = MyParams<typeof getUser2> // string💡 Интересный нюанс, который сегодня осознал: Параметры любой функции в TS на уровне типов всегда представляются в виде массива (кортежа).
Например, для
(x: number, y: string) => string параметры на уровне типов — это [number, string].Именно поэтому запись
(...args: any[]) => any универсальна и подходит под функцию с любым количеством аргументов (от 0 и больше), ведь их параметры просто упакованы в массив!Двигаемся дальше 🔥
