#node.js #typescript #google-cloud-firestore #google-cloud-functions
#node.js #typescript #google-облако-firestore #google-cloud-функции
Вопрос:
Я пытаюсь прочитать сложный документ из Firebase, чтобы выполнить некоторые вычисления, а затем выполнить облачную функцию.
К сожалению, я не могу прочитать данные в тех типах данных, которые я хотел бы.
Вот пример:
interface CourseEvent {
coucourseGroupType: string;
date: FirebaseFirestore.Timestamp;
courseGroupTypeFirebaseId: string;
firebaseId: string;
maxParticipants: number;
participants: Participant[];
start: FirebaseFirestore.Timestamp;
waitingList: Participant[];
weekNumber: string;
}
Здесь я использую облачную функцию
import * as functions from "firebase-functions";
import { firestore, Timestamp, FieldValue } from "./setup";
export const registerCustomerFromWaitingList = functions.firestore
.document("CourseEvents/{courseEvent}")
.onUpdate(async (change, context) => {
const currentCourseEvent = change.after.data() as CourseEvent;
const currentMaxParticipants = currentCourseEvent.maxParticipants;
if (typeof currentMaxParticipants === "number") {
console.log(`currentMaxParticipants type is number`);
} else if (typeof currentMaxParticipants === "string") {
console.log(`currentMaxParticipants type is string`);
} else {
console.log(`currentMaxParticipants type is NOT number or string`);
}
}
Консоль всегда выводит, что currentMaxParticipants
это строка. У меня аналогичная проблема и с другим интерфейсом.
Я также экспериментировал с таким кодом
const nu = change.after.data().maxParticipants as number;
Но, в конце концов, я все еще получаю строку.
Какие-либо советы?
Комментарии:
1. Пожалуйста, отредактируйте вопрос, чтобы показать документ, с которым вы работаете. Вы могли бы предоставить скриншот, на котором четко показано значение поля, которое работает не так, как вы ожидаете.
Ответ №1:
Я узнал, почему я всегда получаю a string
для currentMaxParticipants
переменной.
В Firestore я сохранил его как string
. Я думал, что с помощью утверждений типа я бы также преобразовал значение. В конце концов, я изменил значение в Firestore на a number
, и теперь оно работает.
Я только что прочитал это здесь:
Необходимый машинопись: от новичка до профессионала
ВНИМАНИЕ, утверждение типа не выполняет преобразование типов, которое только сообщает компилятору, какой тип он должен применить к значению для целей проверки типа.
Комментарии:
1. Вот почему я попросил показать скриншот документа. При просмотре документа в консоли будет ясно, какой тип данных он будет предоставлять.