Firebase Admin SDK错误:表达式的类型为“ void”。单独声明

Tha*_*elo 1 firebase typescript firebase-realtime-database google-cloud-functions

我正在从Firebase跟踪此示例。 https://firebase.google.com/docs/functions/开始

我刚刚下载了所有必需的API并开始学习。

我正在用TypeScript创建函数,此“ Hello World” 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());
  });
});
Run Code Online (Sandbox Code Playgroud)

它给出以下错误消息:

Firebase Admin SDK错误:表达式的类型为void。单独声明

Tre*_*eer 6

这有点晚了,但是如果其他人遇到此问题,问题在于res.redirect它不会返回值,因此其返回类型定义为void

该错误是因为该return语句需要一个值。你不能回来void。因此,TypeScript编译器将其显示return res.redirect(303, snapshot.ref.toString());return void,这是生成错误的原因。

解决方案是将收益放在下一行:

res.redirect(303, snapshot.ref.toString());
return;
Run Code Online (Sandbox Code Playgroud)

不幸的是,尽管它是无效的TypeScript,但最佳实践是始终在最终确定响应的代码前放置一个返回值,因此它不会落入函数中其余代码的范围。

将返回值放在下一行很容易忘记,并且在扫描代码时很容易错过。带有响应完成的返回使处理很清楚。

您可以通过禁用no-void-expression掉毛规则来禁用它,但是不建议这样做,因为它通常是有用的规则。