typescript - 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.
如何解决这个问题?是否可能出现空父的情况?
解决方案
这是因为在您的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
推荐阅读
- javascript - 实时 Firebase 使用网站 js 在另一个孩子中获取孩子
- javascript - Vue:自动渲染一些组件并使其方法全局可访问
- conda - 安全地将凭据传递给 conda 以访问公司代理通道
- postman-collection-runner - Azure 中的 Newman Postman 测试结果不显示测试名称
- python - 将字符串列表转换为数字时遇到问题
- azure-data-factory - 在 Azure 数据工厂和 Databricks 运行时的传输过程中是否对数据进行了加密?
- c# - 创建一个具有值为 sender 的按钮的函数
- python - Python - 从具有 ID 的文件中删除切片
- javascript - 在javascript中从用户获取变量的名称
- azure-resource-manager - ARM 模板子子资源冲突,无法引用自身