Я пытался в доке TS найти инфу, но что-то понятного описания так и не нашёл.... Хотя часто в коде вижу его. Общее представление сложилось, что он извлекает тип из генерика. Но вот как правильно это использовать не вьеду.
Вот например этот код вроде работет, но написал его методом научного тыка
myFn<T extends MyType<any>, S = T extends MyType<infer S> ? S : never>(t: T): S {}
но не понимаю, почему именно так нужно писать
S = T extends MyType<infer S> ? S : never
В этом месте смущает T extends MyType<infer S>, когда мы перед этим указали что T extends MyType<any>
Можете разъяснить как это работает?
Дока хлам, в release notes к версии где infer появилось будет получше описание
Когда вы пишете X extends Y ? T : F, тайпскрипт пытается натянуть сову (X) на глобус (Y), считая, что все места в Y, где вы указали infer, являются пропусками, которые надо заполнить. Если у вас одно имя в infer встречается в нескольких местах, тайпскрипт попробует вывести общий тип для этого имени на основе всех субтипов с левой стороны (в X), которые находятся на том же месте, что и субтип с infer в Y
Обсуждают сегодня