Проверяет понимание утилитарного типа Extract в TypeScript и умение применять его для фильтрации типов по совместимости.
Extract — это утилитарный тип, встроенный в TypeScript, который позволяет «вырезать» из объединения типов только те, что совместимы с заданным шаблоном. Он особенно полезен, когда нужно сузить широкий union до конкретной группы вариантов, не переписывая их вручную.
Определение Extract выглядит так:
type Extract<T, U> = T extends U ? T : never;Здесь T — исходное объединение, U — условие совместимости. TypeScript распределяет условный тип по каждому члену union T и оставляет только те, что удовлетворяют условию extends U. Остальные превращаются в never и исчезают из результата.
Рассмотрим фильтрацию union по примитивам:
type Mixed = string | number | boolean | (() => void);
type OnlyStrings = Extract<Mixed, string>; // string
type OnlyFunctions = Extract<Mixed, Function>; // () => voidТакже Extract удобен для работы с дискриминированными объединениями:
type Shape =
| { kind: 'circle'; radius: number }
| { kind: 'square'; side: number }
| { kind: 'triangle'; base: number; height: number };
type RoundShape = Extract<Shape, { kind: 'circle' }>;
// { kind: 'circle'; radius: number }Это позволяет вытаскивать конкретные варианты без ручного дублирования типов.
Extract стоит применять, когда нужно программно сузить union-тип по совместимости, сохранив типобезопасность и избежав дублирования кода.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию