Выбор ответа Middle Дженерики обновлено
Вывод T из двух аргументов
Вопрос
Что произойдёт?
function same<T>(a: T, b: T) {}
same(1, 'a');
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ошибка на аргументе 'a': string нельзя присвоить в number. Когда кандидаты для T (number и string) не имеют общего супертипа среди себя, TypeScript не склеивает их в объединение, а берёт первый подходящий кандидат: number.
Варианты ответа
- Компилируется, а
Tвыводится какunknownиз двух кандидатов - Ошибка на аргументе
1:numberнельзя присвоить вstring - Компилируется, а
Tвыводится как объединениеstring | number - Ошибка на аргументе
'a':stringнельзя присвоить вnumberправильный ответ
Разбор
Когда кандидаты для T (number и string) не имеют общего супертипа среди себя, TypeScript не склеивает их в объединение, а берёт первый подходящий кандидат: number. Второй аргумент проверяется против него и даёт ошибку. Так компилятор ловит случайную передачу разных типов туда, где ожидаются одинаковые.
Если объединение действительно нужно, его указывают явно: same<string | number>(1, 'a').
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.