У меня проблемы с поиском правильных типов для Firebase из-за количества библиотек, из которых он извлекает типы. В этом отношении, вероятно, это хорошая проблема для изучения этой проблемы.
Я использую Phpstorm 2019.3, я понимаю, что VSCode намного лучше помогает при наборе текста.
Вот метод:
protected buildQueryUpToWhereClauseChain(priorQuery: any, whereClauses: WhereDefinition[]): FirebaseFirestore.Query {
// = by default. overridden if meets condition
let preparedWheresQuery: FirebaseFirestore.Query = priorQuery;
if (whereClauses.length > 0) {
preparedWheresQuery = whereClauses
.reduce((accumulatedQuery, {column, operator, value}) => {
return accumulatedQuery.where(column, operator, value);
}, priorQuery);
}
return preparedWheresQuery;
}
Тест на расширенном классе выше:
import firebase from "firebase";
import * as admin from "firebase-admin";
test('builds .where() query', () => {
const openFirestoreConnection = new OpenFirestoreConnection('testdomain.shopify.com', createTestDatabase(null));
const startingQuery = openFirestoreConnection.database
.collection("collectionName")
.where("storeId", "==", openFirestoreConnection.shopDomain);
const whereClauses: WhereDefinition[] = [{
column: "testColumn"
, operator: '=='
, value: "testValue"
}, {
column: "testColumn2"
, operator: '<='
, value: "testValue2"
}];
const builtQuery = openFirestoreConnection.buildQueryUpToWhereClauseChain(startingQuery, whereClauses);
// admin is from firebase-admin library
// Expected constructor: Query. Received constructor: Query
expect(builtQuery).toBeInstanceOf(admin.firestore.Query);
// this one is from "firebase" library as documented here
// https://firebase.google.com/docs/reference/js/firebase.firestore.CollectionReference.html#where
// https://firebase.google.com/docs/reference/js/firebase.firestore.Query.html
// Expected constructor: PublicConstructor. Received constructor: Query
// expect(builtQuery).toBeInstanceOf(firebase.firestore.Query);
});
Если бы кто-нибудь мог объяснить, как найти правильный набор текста в подобных случаях, я был бы признателен, спасибо.
// package.json
// dependencies
"firebase": "^7.5.0",
"firebase-admin": "^8.8.0",
"firebase-functions": "^3.3.0",
// devDependencies
"@firebase/firestore-types": "^1.9.0",
"@firebase/testing": "^0.16.6",
"@types/firebase": "^3.2.1",