Утверждения типа не работают при чтении данных Firestore

#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. Вот почему я попросил показать скриншот документа. При просмотре документа в консоли будет ясно, какой тип данных он будет предоставлять.