来自功能界面的TypeScript选择呼叫签名

时间:2019-11-01 10:05:11

标签: typescript

有一个带有静态函数的函数接口:

interface MyFunction {
  (value: string): string;
  a: string;
  b: string;
}

如何仅Pick呼叫签名(忽略ab)?

2 个答案:

答案 0 :(得分:0)

您不能选择呼叫签名,因为它不是界面的属性。
您可以下一步:

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>;

答案 1 :(得分:0)

您不能Pick,因为您无法传递将选择它的string键,但是这里构造的类型会推断出您的Function的正确类型:

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

Playground link