Firebase云功能-打字稿-未定义类型

时间:2019-06-01 14:26:06

标签: typescript firebase google-cloud-firestore google-cloud-functions

我这里有一个有趣的问题...

我将official documentation用于Firestore事件

从那里我得到了这段代码,以便进行测试和玩转。

exports.countNameChanges = functions.firestore
.document('users/{userId}')
.onUpdate((change, context) => {
    // Retrieve the current and previous value
    const data = change.after.data();
    const previousData = change.before.data();

    // We'll only update if the name has changed.
    // This is crucial to prevent infinite loops.
    if (data.name == previousData.name) return null;

    // Retrieve the current count of name changes
    let count = data.name_change_count;
    if (!count) {
        count = 0;
    }

    // Then return a promise of a set operation to update the count
    return change.after.ref.set({
        name_change_count: count + 1
    }, { merge: true });
});

加上我已经放入的那些进口物品(也许我会错过其中一个)

import * as functions from 'firebase-functions';

import * as Storage from '@google-cloud/storage';
const gcs = new Storage.Storage();

我认为一切看起来都很好,但我收到此错误消息:

src/index.ts:33:13 - error TS2532: Object is possibly 'undefined'.

33         if (data.name == previousData.name) return null;
               ~~~~

src/index.ts:33:26 - error TS2532: Object is possibly 'undefined'.

33         if (data.name == previousData.name) return null;
                            ~~~~~~~~~~~~

src/index.ts:36:21 - error TS2532: Object is possibly 'undefined'.

36         let count = data.name_change_count;
                       ~~~~

这是怎么回事?我在这里想念的是什么?有谁知道我在做什么错并且可以帮助我?我当时认为文档中的所有内容都应该可以正常工作。

1 个答案:

答案 0 :(得分:0)

实际上,这是工作代码,唯一抱怨的是您的短毛绒。

实际上,问题在于onUpdate在创建,更新或删除文档时触发,因此如果删除文档,则change.after.data()可能未定义,这就是linter抱怨的原因。

如果您的意图开始,我建议您在抱怨的任何行的顶部都使用// @ts-ignore,然后在您感到更自在时,可以进行更多的调查,这种情况是为了进行验证确保您正在执行该行,如:

if (previousData && data.name == previousData.name) return null;