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

Обобщения: первые практические задачи

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

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. Код читайте построчно: часть заданий проверяет не результат JavaScript, а то, что TypeScript способен доказать до запуска.
Вопрос 1 из 25
Какой тип результата сохраняет функция identity?
TypeScript
function identity<T>(value: T): T {
  return value;
}
const result = identity({ id: "u1", active: true });
Вопрос 2 из 25
Почему generic полезнее версии с any?
TypeScript
function first<T>(items: readonly T[]): T | undefined {
  return items[0];
}
const name = first(["Ada", "Grace"]);
Вопрос 3 из 25
Что означает вызов pair<string, number>?
TypeScript
function pair<A, B>(left: A, right: B): [A, B] {
  return [left, right];
}
const value = pair<string, number>("age", 36);
Вопрос 4 из 25
Когда generic-параметр действительно оправдан?
Вопрос 5 из 25
Почему function log<T>(value: T): void не всегда лучше function log(value: unknown): void?
Вопрос 6 из 25
Какой тип выводится для T?
TypeScript
function wrap<T>(value: T) {
  return { value };
}
const result = wrap("ready");
Вопрос 7 из 25
Почему один вызов выводит union?
TypeScript
function choose<T>(a: T, b: T): T {
  return Math.random() > 0.5 ? a : b;
}
const value = choose("on", 1);
Вопрос 8 из 25
Какой тип получает переменная key?
TypeScript
function keyOf<const K extends string>(key: K) {
  return key;
}
const key = keyOf("user:id");
Вопрос 9 из 25
Когда стоит явно указывать type argument, хотя вывод работает?
Вопрос 10 из 25
Из callback нельзя вывести T, и компилятор получает unknown. Как помочь без any?
Вопрос 11 из 25
Зачем нужен constraint extends { id: string }?
TypeScript
function getId<T extends { id: string }>(value: T) {
  return value.id;
}
Вопрос 12 из 25
В показанном фрагменте какой вызов запрещён?
TypeScript
function lengthOf<T extends { length: number }>(value: T) {
  return value.length;
}
lengthOf("text");
lengthOf([1, 2]);
lengthOf(42);
Вопрос 13 из 25
Почему K extends keyof T делает getProperty безопасным?
TypeScript
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key];
}
Вопрос 14 из 25
Constraint стал огромным интерфейсом из двадцати полей, хотя функция читает только id. Что улучшить?
Вопрос 15 из 25
Почему extends object не гарантирует наличие конкретных полей?
Вопрос 16 из 25
Как generic помогает повторно использовать mapValues?
TypeScript
function mapValues<T, R>(items: readonly T[], map: (item: T) => R): R[] {
  return items.map(map);
}
const lengths = mapValues(["a", "bbb"], s => s.length);
Вопрос 17 из 25
Почему тип Container<T> полезнее нескольких копий интерфейса?
TypeScript
interface Container<T> {
  value: T;
  map<R>(fn: (value: T) => R): Container<R>;
}
Вопрос 18 из 25
Какой тип параметра лучше для функции, которая только читает generic-массив?
TypeScript
function inspect<T>(items: /* ? */): T | undefined {
  return items[0];
}
Вопрос 19 из 25
Как понять, что generic-helper стал слишком абстрактным?
Вопрос 20 из 25
Что проверить перед вынесением generic в общую библиотеку?
Вопрос 21 из 25
Какой тип результата следует зафиксировать для функции first, чтобы не потерять литеральный элемент readonly-кортежа?
TypeScript
function first<const T extends readonly [unknown, ...unknown[]]>(items: T): T[0] { return items[0]; }
const value = first([10, 20] as const);
Вопрос 22 из 25
Какой вызов должен быть запрещён ограничением T extends { id: string }?
TypeScript
declare function save<T extends { id: string }>(value: T): T;
Вопрос 23 из 25
Функция zip обещает сохранить связь позиций двух кортежей. Какой тест наиболее показателен?
Вопрос 24 из 25
После рефакторинга callback generic-функции получает unknown вместо выведенного типа элемента. Какой тест локализует проблему?
Вопрос 25 из 25
Как понять по тестам, что универсальный helper стал слишком абстрактным для практического API?

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

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

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

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