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.
