首页 > 解决方案 > Firebase snapshot.ref.parent 可能为“null”

问题描述

我正在尝试使此firebase 示例代码正常工作:

// Listens for new log added to /log/:pushId/original and creates an
// uppercase version of the log to /log/:pushId/uppercase
exports.db_uppercaseLog=functions.database
.ref('/log/{pushId}/original')
.onCreate((snapshot)=>{
  // Grab the current value of what was written to the Realtime Database.
  const original = snapshot.val();
  const uppercase = original.toUpperCase();
  // Return a Promise
  return snapshot.ref.parent.child('uppercase').set(uppercase);
});

如果我直接从index.js. 但它不会在 TypeScript 中编译。TS lint 引发以下错误:

> functions@ build D:\Firebase\stax8\functions
> tsc

src/index.ts:94:10 - error TS2531: Object is possibly 'null'.

94   return snapshot.ref.parent.child('uppercase').set(uppercase);
            ~~~~~~~~~~~~~~~~~~~

Found 1 error.

试图通过隔离来解决问题,这将引发另一个问题:

  if (snapshot.ref.parent){
    return snapshot.ref.parent.child('uppercase').set(uppercase);
  }

// > TS7030: Not all code paths return a value.

如何解决这个问题?是否可能出现空父的情况?

标签: typescriptfirebasegoogle-cloud-functions

解决方案


这是因为在您的tsconfig.json文件中,您有以下内容:

strictNullChecks : true

您可以将其更改为 false,也可以使用可选链接:

return snapshot?.ref?.parent?.child('uppercase').set(uppercase)

您可以在此处查看更多信息:

https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#optional-chaining

https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-0.html#--strictnullchecks


推荐阅读