TypeScript 從函數介面選取呼叫簽名
有一個帶有靜態屬性的函數介面:
interface MyFunction {
(value: string): string;
a: string;
b: string;
}
我如何只 Pick 呼叫簽名(忽略 a 和 b)?
答案#1
你無法選擇呼叫簽名,因為它不是你介面的屬性。
你可以這樣做:
interface MyFunction {
(value: string): string;
a: string;
b: string;
}
type Callable<T> = T extends (...args: any[]) => any ? (...args: Parameters<T>) => ReturnType<T> : never;
type MyFunctionCallSignature = Callable<MyFunction>;
答案#2
你無法 Pick 它,因為你無法傳遞一個 string 鍵來選擇它,然而這裡有一些構造類型可以推斷你的函數的正確類型:
interface MyFunction {
(value: string): string;
a: string;
b: string;
}
type SignatureType<T> = T extends (...args: infer R) => any ? R : never;
type CallableType<T extends (...args: any[]) => any> = (...args: SignatureType<T>) => ReturnType<T>;
type CallableOfMyFunction = CallableType<MyFunction>; // Type (value: string) => string
遊樂場連結
