Проверяет понимание mapped types в TypeScript и умение реализовать утилиту Pick<T, K> вручную, что важно для типизации и работы с обобщёнными типами.
Mapped types в TypeScript позволяют создавать новые типы путём перебора ключей исходного типа. Это основа для встроенных утилит вроде Pick, Omit, Partial и Readonly. Идея проста: мы берём объединение ключей (обычно через keyof T или переданный параметр K) и для каждого ключа определяем тип значения.
Общая форма выглядит так:
type MyMapped<T> = {
[P in keyof T]: T[P];
};Здесь P — переменная типа, пробегающая по всем ключам T. Конструкция T[P] — это indexed access type, дающий тип значения по ключу P.
Встроенный Pick<T, K> принимает два параметра: исходный тип T и объединение ключей K, которые нужно оставить. Реализация:
type MyPick<T, K extends keyof T> = {
[P in K]: T[P];
};Ограничение K extends keyof T гарантирует, что мы можем запрашивать только существующие ключи. Если передать несуществующий ключ, компилятор выдаст ошибку.
interface User {
id: number;
name: string;
email: string;
age: number;
}
type UserPreview = MyPick<User, 'id' | 'name'>;
// { id: number; name: string }
const preview: UserPreview = { id: 1, name: 'Alice' };Мы получили новый тип только с нужными полями, не дублируя их описание. Это удобно при формировании DTO, ответов API, пропсов компонентов.
Mapped types поддерживают модификаторы readonly и ?, а также их снятие через -readonly и -?. Например, Partial добавляет ?, а Required снимает его. Также можно использовать key remapping через as для переименования ключей.
Итог: mapped types — мощный инструмент для построения производных типов без дублирования. Собственный Pick показывает, как TypeScript позволяет выражать типовые преобразования декларативно, что особенно полезно в больших проектах с общими моделями данных.
Уровень
Рейтинг:
4
Сложность:
6
Навыки
JavaScript
TypeScript
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию