Выбор ответа Junior Базовые типы спрашивают часто обновлено
any и unknown: где ошибка
Вопрос
Какие строки не скомпилируются?
let a: any = 'x';
let u: unknown = 'x';
a.toUpperCase(); // 1
u.toUpperCase(); // 2
const s1: string = a; // 3
const s2: string = u; // 4
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: 2 и 4. Значение unknown нельзя использовать, пока его не сузили: вызов метода (2) запрещён, и присвоить его переменной типа string (4) тоже нельзя. unknown присваивается только unknown и any. any выключает проверку в обе стороны: на нём можно…
Варианты ответа
- Только 2
- 2 и 4правильный ответ
- Только 4
- Ни одна: оба типа принимают что угодно
Разбор
Значение unknown нельзя использовать, пока его не сузили: вызов метода (2) запрещён, и присвоить его переменной типа string (4) тоже нельзя. unknown присваивается только unknown и any.
any выключает проверку в обе стороны: на нём можно вызвать что угодно (1) и присвоить его куда угодно (3). Поэтому вариант «только 2» забывает про присваивание, «только 4» про вызов метода, а «ни одна» путает unknown с any.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.