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

Интерфейсы и псевдонимы типов

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

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. Код читайте построчно: часть заданий проверяет не результат JavaScript, а то, что TypeScript способен доказать до запуска.
Вопрос 1 из 20
Что произойдёт с двумя объявлениями одного интерфейса?
TypeScript
interface WindowOptions { width: number }
interface WindowOptions { height: number }

const options: WindowOptions = { width: 800, height: 600 };
Вопрос 2 из 20
Почему объект совместим с интерфейсом?
TypeScript
interface Named { name: string }
const user = { name: "Ada", age: 36 };
const named: Named = user;
Вопрос 3 из 20
Как описать вызываемый объект с дополнительным свойством?
TypeScript
interface Counter {
  /* пропущена сигнатура */
  reset(): void;
}
Вопрос 4 из 20
Для чего интерфейс особенно удобен в публичном объектном контракте?
Вопрос 5 из 20
Какой риск у случайного declaration merging в большом проекте?
Вопрос 6 из 20
Какой псевдоним можно задать через type, но не напрямую через interface?
TypeScript
type Identifier = string | number;
Вопрос 7 из 20
Что означает псевдоним Handler?
TypeScript
type Handler = (event: { type: string }) => boolean;
Вопрос 8 из 20
Почему рекурсивный type alias полезен здесь?
TypeScript
type Json =
  | null | boolean | number | string
  | Json[]
  | { [key: string]: Json };
Вопрос 9 из 20
Когда type alias обычно естественнее интерфейса?
Вопрос 10 из 20
Псевдоним переименовали, но структура осталась прежней. Изменится ли совместимость значений?
Вопрос 11 из 20
Какой контракт получится у Admin?
TypeScript
interface User { id: string }
interface Admin extends User { permissions: string[] }
Вопрос 12 из 20
Почему расширение вызывает ошибку?
TypeScript
interface Base { value: string }
interface Derived extends Base { value: number }
Вопрос 13 из 20
Как выразить пересечение двух готовых контрактов через type?
TypeScript
type WithId = { id: string };
type WithTime = { createdAt: Date };
Вопрос 14 из 20
Когда extends читается лучше, чем intersection?
Вопрос 15 из 20
Что проверить перед созданием длинной цепочки интерфейсов extends?
Вопрос 16 из 20
Какая форма лучше для открытого расширения глобального Window?
TypeScript
declare global {
  interface Window {
    analyticsId: string;
  }
}
Вопрос 17 из 20
Какая форма точнее подчёркивает закрытый набор вариантов?
TypeScript
type Result =
  | { ok: true; value: string }
  | { ok: false; error: Error };
Вопрос 18 из 20
Что произойдёт при одинаковом объектном контракте, записанном через interface и type?
TypeScript
interface A { id: string }
type B = { id: string };
const a: A = { id: "x" };
const b: B = a;
Вопрос 19 из 20
Команда спорит, что всегда лучше — interface или type. Какой критерий полезнее?
Вопрос 20 из 20
Почему интерфейс с десятком optional-полей может быть хуже union нескольких состояний?

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

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

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

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