Georgios
Georgios

Reputation: 1037

Type Assertions not Working when Reading Firestore Data

I am trying to read a complex document from Firebase in order to do some calculations and then execute a Cloud Function.

Unfortunately, I am unable to read the data in the data types that I would like.

Here is an example:

interface CourseEvent {
  coucourseGroupType: string;
  date: FirebaseFirestore.Timestamp;
  courseGroupTypeFirebaseId: string;
  firebaseId: string;
  maxParticipants: number;
  participants: Participant[];
  start: FirebaseFirestore.Timestamp;
  waitingList: Participant[];
  weekNumber: string;
}

This is where I am using the Cloud Function

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`);
    }
   }

The console always prints that the currentMaxParticipants is a string. I have a similar problem also with another interface.

I also have experimented with such code

const nu = change.after.data().maxParticipants as number;

But in the end, I am still getting a string.

Any tips?

Upvotes: 0

Views: 88

Answers (1)

Georgios
Georgios

Reputation: 1037

I found out why I would get always a string for the currentMaxParticipants variable.

In Firestore I did save it as a string. I thought that by using type assertions I would also convert the value. In the end, I did change the value within Firestore to a number and now it is working.

I just read this here:

Essential TypeScript: From Beginner to Pro

CAUTION No type conversion is performed by a type assertion, which only tells the compiler what type it should apply to a value for the purposes of type checking.

Upvotes: 1

Related Questions