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
