如何修复Firestore的此TSLint(对象可能是“未定义”)错误

时间:2019-05-17 23:53:50

标签: typescript google-cloud-firestore tslint

我在下面的link中使用firesotre的以下示例。但是,对于data.name中的数据,错误对象可能是'undefined'。我很确定我在文件中有名字。我该如何解决这个问题。

// Listen for updates to any `user` document.
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});
    });

1 个答案:

答案 0 :(得分:0)

如果查看change.after.data()的TypeScript定义,您将看到data方法被声明为返回undefined或object。由于它可能返回未定义,因此当TypeScript处于严格模式时,您需要检查该情况,然后才能开始访问它的属性或方法。即使您绝对确定文档将具有指定的属性,也必须这样做。

您可以禁用严格模式(我不建议这样做-严格模式可以防止编程错误),也可以在开始使用它们之前先检查datapreviousData

const data = change.after.data();
const previousData = change.before.data();
if (data && previousData) {
    // do stuff with them
}