У меня есть монорепо:
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?