typescript - Firebase Admin SDK FEIL: Utrykket har typen `void`. Sett det på sin egen linje som en uttalelse


Jeg følger dette eksemplet fra Firebase. https://firebase.google.com/docs/functions/get-started

Jeg har nettopp lastet ned alle nødvendige API-er og har begynt å lære.

Jeg lager funksjonene med TypeScript, dette "Hello World" https://github.com/firebase/functions-samples/blob/master/typescript-getting-started/functions/src/index.ts fungerte fint.

Men «addMessage()» gjorde det ikke.

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());
  });
});

Den gir denne feilmeldingen:

Firebase Admin SDK FEIL: Uttrykket har typen void. Sett det på sin egen linje som en setning

Svar #1

Dette er litt sent, men i tilfelle andre støter på dette problemet, er problemet at res.redirect ikke returnerer en verdi, så returtypen er definert som void.

Feilen oppstår fordi return-setningen forventer en verdi. Du kan ikke returnere void. Dermed ser TypeScript-kompilatoren på return res.redirect(303, snapshot.ref.toString()); som return void, noe som er det som genererer feilen.

Løsningen er å sette retur på neste linje:

res.redirect(303, snapshot.ref.toString());
return;

Dessverre, mens det er ugyldig TypeScript, er beste praksis alltid å sette et return før kode som fullfører et svar, slik at det ikke faller gjennom til resten av koden i en funksjon.

Å plassere return på neste linje er lett å glemme, og lett å overse når man skanner kode. Return med responsavslutningen gjør det klart at behandlingen er fullført.

Du kan deaktivere dette ved å deaktivere no-void-expression-lintingsregelen, men det anbefales ikke, siden det generelt er en nyttig regel.

Relaterte artikler