TS TypeScript  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Отображаемые типы

Разбирает тему «Отображаемые типы» на практических сценариях: поиск дефектов, сравнение решений и оценка последствий. Вопросы требуют читать код, сопоставлять статические гарантии с поведением JavaScript и выбирать решение, которое не рассыплется при развитии проекта.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. Код читайте построчно: часть заданий проверяет не результат JavaScript, а то, что TypeScript способен доказать до запуска.
Вопрос 1 из 25
Что создаёт mapped type Flags<T>?
TypeScript
type Flags<T> = { [K in keyof T]: boolean };
type UserFlags = Flags<{ id: string; active: boolean }>;
Вопрос 2 из 25
Почему K можно использовать для T[K]?
TypeScript
type Clone<T> = { [K in keyof T]: T[K] };
Вопрос 3 из 25
Какой тип делает каждое поле getter-функцией?
TypeScript
type Getters<T> = {
  [K in keyof T]: () => T[K]
};
Вопрос 4 из 25
Когда mapped type лучше ручного перечисления полей?
Вопрос 5 из 25
Почему mapped type не создаёт объект значений?
Вопрос 6 из 25
В показанном фрагменте что делает -readonly?
TypeScript
type Mutable<T> = { -readonly [K in keyof T]: T[K] };
type A = Mutable<{ readonly id: string }>;
Вопрос 7 из 25
Что делает -? в Concrete<T>?
TypeScript
type Concrete<T> = { [K in keyof T]-?: T[K] };
type A = Concrete<{ name?: string }>;
Вопрос 8 из 25
Как одновременно сделать поля readonly и optional?
TypeScript
type Snapshot<T> = /* ? */;
Вопрос 9 из 25
Почему Required<T> не всегда делает значение фактически присутствующим в runtime?
Вопрос 10 из 25
Какой риск у массового Mutable<T> в API?
Вопрос 11 из 25
Какие ключи создаёт Getters<T>?
TypeScript
type Getters<T> = {
  [K in keyof T as `get${Capitalize<string & K>}`]: () => T[K]
};
type UserGetters = Getters<{ name: string; age: number }>;
Вопрос 12 из 25
Как отфильтровать ключ kind?
TypeScript
type RemoveKind<T> = {
  [K in keyof T as K extends "kind" ? never : K]: T[K]
};
Вопрос 13 из 25
Почему string & K используется в Capitalize?
TypeScript
type Events<T> = {
  [K in keyof T as `on${Capitalize<string & K>}`]: (value: T[K]) => void
};
Вопрос 14 из 25
Какой риск у сложного автоматического переименования ключей?
Вопрос 15 из 25
Как проверить key remapping при добавлении symbol-ключа?
Вопрос 16 из 25
В показанном фрагменте что описывает Patch<T>?
TypeScript
type Patch<T> = {
  [K in keyof T]?: T[K]
};
Вопрос 17 из 25
Как сделать только выбранные ключи optional?
TypeScript
type OptionalKeys<T, K extends keyof T> =
  Omit<T, K> & Partial<Pick<T, K>>;
Вопрос 18 из 25
Почему Events<T> сохраняет тип аргумента каждого обработчика?
TypeScript
type Events<T> = {
  [K in keyof T as `on${Capitalize<string & K>}`]: (value: T[K]) => void
};
Вопрос 19 из 25
Когда производный mapped-контракт может стать опасным?
Вопрос 20 из 25
Как удержать производный контракт понятным?
Вопрос 21 из 25
Какой результат нужно зафиксировать для Mutable<Readonly<User>>, чтобы тест проверял снятие модификатора readonly?
TypeScript
type Mutable<T> = { -readonly [K in keyof T]: T[K] };
type User = { readonly id: string; readonly name: string };
Вопрос 22 из 25
Какой ключ должен отсутствовать в типе PublicUser после переименования ключей через as?
TypeScript
type PublicUser<T> = {
  [K in keyof T as K extends "passwordHash" ? never : K]: T[K]
};
Вопрос 23 из 25
Почему тест mapped type должен включать optional и readonly свойства одновременно?
Вопрос 24 из 25
После рефакторинга key remapping два исходных ключа стали отображаться в один новый ключ. Что должен проверить тест?
Вопрос 25 из 25
Какой набор примеров лучше проверяет производный контракт Update<T>?

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

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

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

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