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

Продвинутые обобщения

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

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. Код читайте построчно: часть заданий проверяет не результат JavaScript, а то, что TypeScript способен доказать до запуска.
Вопрос 1 из 25
Зачем нужны два параметра T и K?
TypeScript
function pluck<T, K extends keyof T>(items: readonly T[], key: K): T[K][] {
  return items.map(item => item[key]);
}
Вопрос 2 из 25
Какой тип результата у вызова?
TypeScript
function zip<A, B>(a: readonly A[], b: readonly B[]): Array<[A, B]> {
  return a.slice(0, b.length).map((x, i) => [x, b[i]!]);
}
const pairs = zip([1, 2], ["a", "b"]);
Вопрос 3 из 25
Почему здесь нужен отдельный R?
TypeScript
function pipe<T, R>(value: T, fn: (value: T) => R): R {
  return fn(value);
}
Вопрос 4 из 25
Когда несколько type parameters избыточны?
Вопрос 5 из 25
Как назвать параметры типов в сложном публичном API?
Вопрос 6 из 25
Какой параметр типа можно опустить при вызове?
TypeScript
type ApiResponse<TData, TError = Error> =
  | { ok: true; data: TData }
  | { ok: false; error: TError };
Вопрос 7 из 25
Какой тип получит response?
TypeScript
type Box<T = string> = { value: T };
const response: Box = { value: "ok" };
Вопрос 8 из 25
Почему default обязан удовлетворять constraint?
TypeScript
type Collection<T extends { id: string } = { id: number }> = T[];
Вопрос 9 из 25
Когда default = any опасен?
Вопрос 10 из 25
Как default влияет на совместимость API при добавлении нового type parameter?
Вопрос 11 из 25
Почему Producer<Dog> обычно можно использовать как Producer<Animal>?
TypeScript
class Animal { name = "" }
class Dog extends Animal { bark() {} }
type Producer<T> = () => T;
Вопрос 12 из 25
Почему Consumer<Animal> может обслужить место, где нужен Consumer<Dog>?
TypeScript
type Consumer<T> = (value: T) => void;
Вопрос 13 из 25
Почему mutable-массивы усложняют вариантность?
TypeScript
const dogs: Dog[] = [new Dog()];
const animals: Animal[] = dogs;
animals.push(new Animal());
Вопрос 14 из 25
Как уменьшить риск вариантности в API коллекций?
Вопрос 15 из 25
Почему методы и function properties могут проверяться немного по-разному при strictFunctionTypes?
Вопрос 16 из 25
Какой публичный тип проще для потребителя?
TypeScript
// Вариант A
export type Cache<T, K extends keyof T, V = T[K]> = { get(key: K): V };
// Вариант B
export interface UserCache { get(key: "id" | "name"): string }
Вопрос 17 из 25
Почему не стоит экспортировать служебный type parameter?
TypeScript
export type Query<TInternalAst, TResult> = {
  run(): TResult;
};
Вопрос 18 из 25
Как фабрика может скрыть сложный generic?
TypeScript
function defineRoutes<const T extends Record<string, Route>>(routes: T) {
  return createRouter<T>(routes);
}
Вопрос 19 из 25
Как оценить ergonomics generic-API?
Вопрос 20 из 25
Когда overload или отдельные функции понятнее универсального generic?
Вопрос 21 из 25
Какой тип должен получить result, чтобы тест удерживал связь между входным литералом и возвращаемым значением?
TypeScript
function echo<const T extends string>(value: T): T { return value; }
const result = echo("draft");
Вопрос 22 из 25
Какой отрицательный пример лучше проверяет ограничение K extends keyof T?
TypeScript
type User = { id: string; name: string };
declare function read<T, K extends keyof T>(obj: T, key: K): T[K];
Вопрос 23 из 25
Почему этот тест должен проверять оба направления присваивания, а не только одно?
TypeScript
type Actual = { id: string; role: "admin" };
type Expected = { id: string; role: "admin" };
Вопрос 24 из 25
После добавления значения по умолчанию generic-функция стала выводить слишком широкий тип. Какая проверка поймает регрессию точнее всего?
Вопрос 25 из 25
Библиотека экспортирует сложный generic с четырьмя параметрами. Какой тест лучше отражает опыт реального потребителя?

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

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

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

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