Расширение типов внешних библиотек в TypeScript
Задача: расширить typescript insterface npm пакета. Звучит просто.
Есть пакет store и он позволяет расширять свое API через плагины, и его тайпинги, которые ничего не знают про твои плагины и твой патчинг. В этих тайпингах есть тип StoreJsAPI и его нужно проапгрейдить, добавив некоторые параметры.
Исходный тип в сторонней библиотеке, я не имею возможности его редактировать.
Тип, который я хочу получить.
Как можете заметить, появился аргумент `options`.
Можно загуглить и быстро найти решение, например такое
Или вот такое
Но если вы попробуете это запустить, то ничего не будет работать. Как быть? Если вы внимательно посмотрите на файл типов то увидите что то такое:
export = — это способ создания деклараций для модулей CommonJS, чтобы TypeScript мог корректно работать с их экспортами.
Внимательный пользователь увидит, что все интерфейсы находятся за пределами `declare module`, а это значит что эти интерфейсы доступны через `globalThis`, и это отлично, можно получить доступ к этим интерфейсам!
Мы используем `globalThis.StoreJsAPI` что бы расширить его и делаем `export const store: StoreJsAPI;` что бы задать новый тип.
И что бы это все заработало, не забудь, что `tsconfig` должен включать (свойство include) этот файл `store.d.ts`.
Вот такая небольшая записка разработчика, которая может кому-то помочь.
Заглядывайте в мой Telegram-канал @devdrafts_rss, где я делюсь материалами по IT, которые сам употребляю 🙂