Выбор ответа 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 выключает проверку в обе стороны: на нём можно…

Варианты ответа

  1. Только 2
  2. 2 и 4правильный ответ
  3. Только 4
  4. Ни одна: оба типа принимают что угодно

Разбор

Значение unknown нельзя использовать, пока его не сузили: вызов метода (2) запрещён, и присвоить его переменной типа string (4) тоже нельзя. unknown присваивается только unknown и any.

any выключает проверку в обе стороны: на нём можно вызвать что угодно (1) и присвоить его куда угодно (3). Поэтому вариант «только 2» забывает про присваивание, «только 4» про вызов метода, а «ни одна» путает unknown с any.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.