Как деструктурировать параметры облачной функции? - PullRequest
0 голосов
/ 24 января 2020

Я уже некоторое время пытаюсь сделать что-то, что должно быть очень простым, но я продолжаю сталкиваться с проблемами.

Как правильно деструктурировать параметр снимка в облачной функции пожарного хранилища и назначать типы?

Вот как работает код:

    export default (region: any) =>
      functions
        .region(region)
        .firestore.document(
          "organisations/{organisationID}/workspaces/{workspaceID}"
        )
        .onCreate(
          async (snap: FirebaseFirestore.DocumentSnapshot, context: functions.EventContext) => {
               const data = snap.data() as CustomType
               ...do something else
          }
        }

Вместо этого я пытаюсь избежать начального const data = snap.data() as CustomType внутри функции:

  export default (region: any) =>
          functions
            .region(region)
            .firestore.document(
              "organisations/{organisationID}/workspaces/{workspaceID}"
            )
            .onCreate(
              async ({data, ref}:{data:()=> CustomType, ref:FirebaseFirestore.DocumentReference }, context: functions.EventContext) => {

                   ...do something else
              }
            }

Но когда я пытаюсь это делать, я получаю ошибки:

Argument of type '({ data, ref }: { data: () => CustomType; ref: FirebaseFirestore.DocumentReference; }, context: functions.EventContext) => Promise<void>' is not assignable to parameter of type '(snapshot: DocumentSnapshot, context: EventContext) => any'.
  Types of parameters '__0' and 'snapshot' are incompatible.
    Type 'DocumentSnapshot' is not assignable to type '{ data: () => CustomType; ref: DocumentReference; }'.
      The types returned by 'data()' are incompatible between these types.
        Type 'DocumentData | undefined' is not assignable to type 'CustomType'.
          Type 'undefined' is not assignable to type 'CustomType'.
            Type 'undefined' is not assignable to type 

Я делаю что-то не так? И если это не так, есть ли способ заставить тип возвращаемого значения (аналогично тому, когда я объявляю const data = snap.data() as CustomType)?

1 Ответ

1 голос
/ 24 января 2020

Вы не можете избежать вызова data(), чтобы получить необработанные данные из моментального снимка документа. Это часть обычного способа работы с документами из Firestore. Это также не очень дорого.

Только после того, как у вас есть необработанные данные в объекте, вы можете сказать машинописи, какому интерфейсу должно соответствовать содержимое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...