Проверяет умение расширять типы сторонних библиотек через declaration merging и module augmentation, что важно при интеграции плохо типизированных пакетов.
TypeScript поддерживает механизм declaration merging, который позволяет объединять несколько объявлений с одинаковым именем в одно. Это особенно полезно, когда нужно дополнить типы внешней библиотеки, не изменяя её исходный код и не создавая новый тип-обёртку.
Если библиотека экспортирует интерфейс, можно объявить интерфейс с тем же именем в том же модуле или глобальном пространстве. TypeScript автоматически объединит поля.
// types/library-augmentation.d.ts
import 'some-library';
declare module 'some-library' {
interface User {
age: number;
role: 'admin' | 'user';
}
}
Для расширения экспортируемых типов модуля используется конструкция declare module 'имя-пакета'. Внутри можно добавлять новые поля к существующим интерфейсам или объявлять новые экспорты.
// global.d.ts
import 'express';
declare module 'express' {
interface Request {
user?: { id: string; name: string };
}
}
Если библиотека добавляет что-то в глобальную область (например, Window), можно использовать declare global внутри модуля.
export {};
declare global {
interface Window {
myLib: { init: () => void };
}
}
Request Express после middleware аутентификации.Важно, чтобы файл с расширением был подключён в компиляцию (через include в tsconfig или импорт). Иначе TypeScript не увидит объединение.
Итог: declaration merging и module augmentation позволяют гибко адаптировать типы внешних библиотек под нужды проекта без создания новых типов и без форка пакета. Это особенно ценно при работе с legacy-кодом или плохо типизированными зависимостями.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию