我正在关注 firebase 中的这个例子。https://firebase.google.com/docs/functions/get-started https://firebase.google.com/docs/functions/get-started
我刚刚下载了所有必需的 API 并开始学习。
我正在使用 TypeScript 创建函数,这个“Hello World”https://github.com/firebase/functions-samples/blob/master/typescript-getting-started/functions/src/index.ts https://github.com/firebase/functions-samples/blob/master/typescript-getting-started/functions/src/index.ts工作得很好。
但“addMessage()”没有。
exports.addMessage = functions.https.onRequest((req, res) => {
const original = req.query.text;
return admin.database().ref('/messages').push({original: original}).then((snapshot) => {
return res.redirect(303, snapshot.ref.toString());
});
});
它给出了这个错误消息:
Firebase 管理 SDK 错误:表达式具有类型void
。将其作为声明放在自己的行中
这有点晚了,但万一其他人遇到这个问题,问题是res.redirect
不返回值,因此它的返回类型定义为void
.
该错误是因为return
语句需要一个值。你无法返回void
。因此,TypeScript 编译器正在查看return res.redirect(303, snapshot.ref.toString());
as return void
,这就是产生错误的原因。
解决方案是将 return 放在下一行:
res.redirect(303, snapshot.ref.toString());
return;
不幸的是,虽然它是无效的 TypeScript,但最佳实践是始终在完成响应的代码之前添加 return,这样它就不会落到函数中的其余代码中。
将回车放在下一行很容易忘记,而且扫码时也很容易错过。响应完成的返回清楚地表明处理已完成。
您可以通过禁用no-void-expression
linting 规则,但不建议这样做,因为它通常是一个有用的规则。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)