Как создать модуль с интерфейсами с неполными типами в монореполе Typescript Firebase? - PullRequest
0 голосов
/ 22 марта 2020

У меня есть монорепо:

project
- modA
  - modA-stuff.ts
- modB
  - modB-admin-stuff.ts
- common
  - index.ts

Я хочу создать некоторые классы и интерфейсы в common/index.ts и использовать их в modA и modB через import common. Легко. НО: некоторые из этих классов зависят от типов, которые отличаются между modA и modB. (В частности, в modA класс firebase происходит от import firebase, а в modB - от import firebase-admin - и вы не можете импортировать оба из них, потому что один только для внешнего интерфейса, а другой - только для внутреннего.)

Так, как я могу, например, написать это в common/index.ts:

export interface Record {
  id: string;
  created: Timestamp; // this is either firebase.firestore.Timestamp, OR firebase_admin.firestore.Timestamp
}
export function updateDbDoc(doc: DocumentSnapshot) {
 // ...
}

Я могу сделать интерфейс обобщенным c над Timestamp, но все еще не могу напечатать это Timestamp свойства в реализации, потому что я не могу импортировать оба возможных источника. Могу ли я просто написать тип заглушки для Timestamp в common/index.ts? (И аналогично для DocumentSnapshot)

Или, что еще лучше, есть ли общий источник, который я могу импортировать для типов баз данных (Collection, DocumentSnapshot, Timestamp et c.), Который будет работать с firebase и firebase-admin?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...