TS TypeScript  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Объединения и литеральные типы

Вопросы требуют читать код, сопоставлять статические гарантии с поведением JavaScript и выбирать решение, которое не рассыплется при развитии проекта.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. Код читайте построчно: часть заданий проверяет не результат JavaScript, а то, что TypeScript способен доказать до запуска.
Вопрос 1 из 20
Какой вызов будет отклонён?
TypeScript
function format(value: string | number) {
  return String(value);
}
format("12");
format(12);
format(true);
Вопрос 2 из 20
Почему прямой вызов toUpperCase запрещён?
TypeScript
function normalize(value: string | string[]) {
  return value.toUpperCase();
}
Вопрос 3 из 20
Какой тип результата у выражения?
TypeScript
type Input = "yes" | "no" | 0 | 1;
const value: Input = Math.random() ? "yes" : 0;
Вопрос 4 из 20
Почему union предпочтительнее any для параметра, который принимает строку или число?
Вопрос 5 из 20
В union добавили новый вариант. Как сделать так, чтобы забытые ветви обнаружились компилятором?
Вопрос 6 из 20
Почему присваивание запрещено?
TypeScript
type Direction = "left" | "right";
let direction: Direction = "left";
direction = "up";
Вопрос 7 из 20
В показанном фрагменте какой тип имеет method?
TypeScript
const request = { method: "GET" } as const;
const method = request.method;
Вопрос 8 из 20
Как сохранить литеральные значения массива как union?
TypeScript
const roles = ["admin", "editor", "viewer"] as const;
type Role = /* ? */;
Вопрос 9 из 20
Когда строковый литеральный union удобнее enum?
Вопрос 10 из 20
Почему широкая аннотация Record<string, string> может потерять точность литеральных ключей?
Вопрос 11 из 20
Какой метод можно вызвать без сужения?
TypeScript
function size(value: string | number[]) {
  return value.length;
}
Вопрос 12 из 20
Почему свойство error недоступно до проверки ok?
TypeScript
type Result =
  | { ok: true; value: string }
  | { ok: false; error: Error };
function print(result: Result) {
  console.log(result.error);
}
Вопрос 13 из 20
Что вернёт безопасная реализация?
TypeScript
function message(result: { ok: true; value: string } | { ok: false; error: Error }) {
  if (result.ok) return result.value;
  return result.error.message;
}
Вопрос 14 из 20
Почему один интерфейс с полями value? и error? слабее размеченного union для результата операции?
Вопрос 15 из 20
Какой общий член union можно использовать до сужения?
Вопрос 16 из 20
Как безопасно получить верхний регистр?
TypeScript
function upper(value: string | string[]) {
  // выбрать реализацию
}
Вопрос 17 из 20
Почему проверка truthy может быть ошибочной?
TypeScript
function label(value: string | 0 | null) {
  if (value) return value.toUpperCase();
  return "нет";
}
Вопрос 18 из 20
Какой доступ безопасен после проверки in?
TypeScript
type A = { kind: "a"; run(): void };
type B = { kind: "b"; stop(): void };
function act(value: A | B) {
  if ("run" in value) {
    value.run();
  }
}
Вопрос 19 из 20
Значение приходит как string, а функция принимает Role = "admin" | "viewer". Что нужно сделать?
Вопрос 20 из 20
Как не потерять корректный вариант 0 при выборе значения по умолчанию?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу