typescript - 如何將回呼定義為兩種類型之一?
我正在嘗試定義一些類型,這些類型表示回調必須以兩種方式之一使用,要麼它必須是錯誤,在這種情況下它不應該有結果,要麼它必須是結果,在這種情況下它不得有錯誤。
所以這裡舉個例子,這是一個我嘗試使用它的方法:
import { LambdaCallback } from "./types";
export function handler(event:any, context:any, callback:LambdaCallback) {
console.log(event)
callback(null, {
statusCode: 200,
body: JSON.stringify({msg: "Hello, World!!"})
})
}
這是我對類型的嘗試:
export type LambdaCallbackError = string | {};
export type LambdaCallResult = {
statusCode: number,
body: string
}
export type LambdaCallbackWithError = (error:LambdaCallbackError) => void;
export type LambdaCallbackWithResult = (error:null, result:LambdaCallResult) => void;
export type LambdaCallback = LambdaCallbackWithError | LambdaCallbackWithResult;
這些類型編譯沒有問題,但當我嘗試使用它時出現以下錯誤:
lambda/hello.ts(6,5):錯誤 TS2349:無法調用其類型缺少調用簽名的表達式。類型 'LambdaCallback' 沒有兼容的調用簽名。
有什麼想法嗎?
答案#1
您的程式碼 LambdaCallbackWithError | LambdaCallbackWithResult
這是錯的。你沒有一個可以成為那些之一的單一函數。你有一個同時是那些兩者的單一函數。
你應該:
export type LambdaCallback = (error:null | LambdaCallbackError, result:LambdaCallResult) => void;
