typescript - Remedierea incompatibilității de tip între pachetele `firebase-admin` și `firebase`


Scriu funcții care sunt concepute pentru a manipula date Firestore fie în codul clientului, fie în funcții cloud.

Din păcate, se pare că tipurile TypeScript pentru firebase (folosite pentru codul client) și firebase-admin (folosite pentru funcțiile cloud), deși aproape identice, sunt incompatibile. Are cineva o soluție în afară de a importa și aliasa toate tipurile?

În prezent, primesc erori precum:

Tipul 'FirebaseFirestore.DocumentReference' nu poate fi atribuit tipului 'firebase.firestore.DocumentReference'

Acest lucru se datorează faptului că îmi definesc interfețele în codul clientului folosind firebase, dar încerc apoi să inițializez o instanță și să o folosesc în codul funcțiilor folosind firebase-admin. Dar aceeași eroare ar apărea dacă le-aș schimba între ele.

Din păcate, se pare că definițiile TypeScript ale Node Admin SDK nu sunt un superset al definițiilor TypeScript ale Clientului, chiar dacă par să fie din perspectiva unei interfețe.

Răspuns #1

Puteți crea propria interfață care să copieze elementele comune ale SDK-urilor pentru client și server și să implementați un wrapper în jurul implementărilor acestora pentru a comuta după cum este necesar. Wrapper-ul va delega pur și simplu către destinația așteptată și, de asemenea, poate traduce orice valori sentință precum cele returnate de FieldValue.serverTimestamp() după cum este necesar.

Cu alte cuvinte, nu există o soluție ușoară. Acest lucru este exact ca crearea oricărei abstracții peste mai multe implementări, cu excepția faptului că API-urile, în general, nu necesită nicio traducere.