export interface DocumentSnapshot { id : string ; data ( ) : any ; } export interface QuerySnapshot { docs : DocumentSnapshot [ ] ; } export interface DocumentRef { get : ( ) => Promise < DocumentSnapshot > ; set : ( data : { [ key ] : any ; } ) => Promise < void > ; update : ( data : { [ key ] : any ; } ) => Promise < void > ; } export interface Query { where : ( field : string , operator : WhereFilterOp , value : any ) => Query ; get : ( ) => Promise < QuerySnapshot > ; } export interface CollectionRef extends Query { add : ( data : { [ key ] : any ; } ) => Promise < DocumentRef > ; doc : ( documentName : string ) => DocumentRef ; } export type WhereFilterOp = '<' | '<=' | '==' | '>=' | '>' | 'array-contains' ; export interface Transaction { delete ( documentRef ) : Transaction ; get ( documentRef ) : Promise < DocumentSnapshot > ; set ( documentRef , data ) : Transaction ; update ( documentRef , data ) : Transaction ; } export interface FirestoreModule { collection : ( collectionPath : string ) => CollectionRef ; runTransaction ( updateFunction ) : Promise < any > ; }