TypeScript odaberi potpis poziva iz funkcijskog sučelja


Postoji funkcijsko sučelje sa statičkim članovima:

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

Kako mogu Pick samo potpisi poziva (ignoriiraj a i b)?

Odgovor #1

Ne možete odabrati potpis poziva jer on nije svojstvo vašeg sučelja.
Možete učiniti sljedeće:

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

Odgovor #2

Ne možete Pick jer ne možete proslijediti string ključ koji će ga odabrati, međutim, evo konstruiranih tipova koji će zaključiti ispravan tip vaše funkcije :

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

Veza za igralište

Povezani članci