Firebase 管理 SDK 错误:表达式的类型为“void”。将其作为声明放在自己的行中

2024-05-08

我正在关注 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-expressionlinting 规则,但不建议这样做,因为它通常是一个有用的规则。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase 管理 SDK 错误:表达式的类型为“void”。将其作为声明放在自己的行中 的相关文章

随机推荐