Как добавить в типы подключаемой библиотеки новое свойство?

Подключил в проект firebase, добавил

firebase.getCurrentUser = () => new Promise((resolve, reject) => {
  const unsubscribe = firebase.auth().onAuthStateChanged((user) => {
    unsubscribe();
    resolve(user);
  }, reject);
});

Как загнать в проверку типов новое свойство?
  • Вопрос задан
  • 38 просмотров
Пригласить эксперта
Ответы на вопрос 2
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
https://www.typescriptlang.org/docs/handbook/decla...

Создайте в корне файл с расширением .d.ts с именем, которое не матчится с другими файлами (так называемая свободная декларация), и расширьте неймспейс:
import 'firebase'; // нужно, чтоб не перетирать модуль, а мержить
declare module 'firebase' {
  namespace firebase {
    export const getCurrentUser: () => Promise<User>; // User тоже надо заимпортить
  }
}
Ответ написан
Комментировать
Alexandroppolus
@Alexandroppolus
кодир
Плохая затея в принципе. Во первых, не надо перековывать совершенно конкретный модуль в "божественный объект" (см. паттерны, антипаттерны, SRP и т.д.). Во вторых, к 'firebase' есть своя документация, и вдруг появится метод мимо этой документации, проект станет сложнее для понимания другими разработчиками - даже если вдруг дойдут руки описать свои вставки, то документация получится раскиданной по ресурсам. В третьих, в библиотеке может появиться свой метод с таким же названием, и это самый тяжелый случай, тут даже объяснять не надо.
Возможно, есть ещё какие-то поинты, но текстовое поле слишком узкое, чтобы записать из здесь..
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы