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

Пересечения и композиция типов

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

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 20 вопросов отведено 55 минут. Код читайте построчно: часть заданий проверяет не результат JavaScript, а то, что TypeScript способен доказать до запуска.
Вопрос 1 из 20
Какие поля обязательны у Employee?
TypeScript
type Person = { name: string };
type Worker = { employeeId: string };
type Employee = Person & Worker;
Вопрос 2 из 20
Почему значение не подходит типу Audited?
TypeScript
type Entity = { id: string };
type Stamp = { updatedAt: Date };
type Audited = Entity & Stamp;
const value: Audited = { id: "x" };
Вопрос 3 из 20
В показанном фрагменте какой тип имеет merged?
TypeScript
function merge<A, B>(a: A, b: B): A & B {
  return Object.assign({}, a, b);
}
const merged = merge({ id: "x" }, { active: true });
Вопрос 4 из 20
Когда intersection естественен?
Вопрос 5 из 20
Почему A & B не означает последовательное хранение двух объектов?
Вопрос 6 из 20
Что получится после композиции контрактов?
TypeScript
type CanRead = { read(): string };
type CanWrite = { write(value: string): void };
type Store = CanRead & CanWrite;
Вопрос 7 из 20
Какой объект совместим с Handler?
TypeScript
type HasName = { name: string };
type Callable = (input: string) => number;
type Handler = HasName & Callable;
Вопрос 8 из 20
Как composition влияет на параметр функции?
TypeScript
type WithId = { id: string };
type WithVersion = { version: number };
function save(value: WithId & WithVersion) {}
Вопрос 9 из 20
Чем композиция мелких ролей полезнее огромного базового интерфейса?
Вопрос 10 из 20
Когда лучше создать именованный интерфейс, а не повторять длинное A & B & C & D?
Вопрос 11 из 20
Почему тип Conflicted практически непригоден?
TypeScript
type A = { value: string };
type B = { value: number };
type Conflicted = A & B;
Вопрос 12 из 20
Почему функция с конфликтующими параметрами может дать неожиданный тип?
TypeScript
type F1 = (value: string) => void;
type F2 = (value: number) => void;
type Both = F1 & F2;
Вопрос 13 из 20
Что произойдёт при пересечении optional и required свойства?
TypeScript
type A = { id?: string };
type B = { id: string };
type C = A & B;
Вопрос 14 из 20
Как найти скрытый never в сложном intersection?
Вопрос 15 из 20
Как исправить конфликт value: string и value: number, если это разные понятия?
Вопрос 16 из 20
Почему этот тип может быть избыточным?
TypeScript
type User = { id: string; name: string };
type NamedUser = User & { name: string };
Вопрос 17 из 20
Какой подход лучше сохраняет различие частей конфигурации?
TypeScript
type Http = { timeout: number };
type Cache = { timeout: number };
Вопрос 18 из 20
Когда mixin-функция действительно возвращает intersection?
TypeScript
function withTimestamp<T extends object>(value: T) {
  return { ...value, updatedAt: new Date() };
}
Вопрос 19 из 20
Почему бесконтрольное наращивание intersections ухудшает публичный API?
Вопрос 20 из 20
Как проверить практическую применимость intersection-типа?

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

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

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

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