Выбор ответа Middle Условные и mapped-типы обновлено
infer в шаблонной строке
Вопрос
Какой тип у X?
type Id<S> = S extends `user-${infer N}` ? N : never;
type X = Id<'user-42'>;
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: '42'. Шаблонный литерал с infer сопоставляет строку с образцом: всё после user- попадает в N.
Варианты ответа
'user-42'stringnumber'42'правильный ответ
Разбор
Шаблонный литерал с infer сопоставляет строку с образцом: всё после user- попадает в N. Получается строковый литерал '42', а не число: из строки в число тип сам не превращается.
Начиная с TypeScript 4.8 число можно получить, указав ограничение infer N extends number. Целая строка 'user-42' вернулась бы в ветке без совпадения при : S, а здесь там never.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.