firebase - JavaScript 轉 TypeScript 錯誤 - 雲端函式
我正在按照這個指南(https://www.youtube.com/watch?v=qZ1EFnFOGvE&list=PL55RiY5tL51r5jyQoPZhwLueLpPeAV6P9)嘗試我的第一個雲函數,該指南是用 JS 編寫的,但我改為使用 Typescript 編寫。
我已創建以下內容:
// // Start writing Firebase Functions
// // https://firebase.google.com/docs/functions/typescript
//
export const helloWorld = functions.https.onRequest((request, response) => {
if (request.method !== 'POST') {
return response.status(500).json({
message: 'Not allowed'
});
}
response.status(200).json({
message: 'Hello World!'
});
});
然而,程式碼檢查工具給了我以下錯誤:
類型 '(request: Request, response: Response) => Response | undefined' 的參數不能指定給類型 '(req: Request, resp: Response) => void | Promise' 的參數。類型 'Response | undefined' 不能賦值給類型 'void | Promise'。類型 'Response' 不能賦值給類型 'void | Promise'。類型 'Response' 缺少類型 'Promise' 的以下屬性:then、catch、[Symbol.toStringTag]
我不確定如何修改程式碼。
答案#1
Typescript 預期一個函數要麼不返回任何東西,要麼返回一個 Promise。然而,你在 if 語句中返回了 response 對象,如果條件不成立則返回 undefined。在這種情況下,一個簡單的解決方法是:
export const helloWorld = functions.https.onRequest((request, response) => {
if (request.method !== 'POST') {
response.status(500).json({
message: 'Not allowed'
});
} else {
response.status(200).json({
message: 'Hello World!'
});
}
});
如果你想要在函數中「返回」而不是使用 else 語句,你可以這樣做:
export const helloWorld = functions.https.onRequest((request, response) => {
if (request.method !== 'POST') {
response.status(500).json({
message: 'Not allowed'
});
return;
}
response.status(200).json({
message: 'Hello World!'
});
});
