TypeScript: Hur skulle jag skriva typerna för en anropbar/förlängningsbar enhet?
Jag har en JavaScript-funktion/klass som både kan anropas och utökas. Låt oss säga att den heter Hello.
Hello kan användas på två sätt:
class Hi extends Hello { }eller
Hello('there');Hur skulle jag skriva typningarna för Hello så att TypeScript vet att det både är anropbart och utökningsbart?
Svar #1
Sättet att göra det på är att deklarera Hello som en variabel som har en typ som är ett gränssnitt med både anropbara och konstruktorsignaturer:
// this is the type for an object that new Hello() creates
declare interface Hello {
foo(a: string): void;
}
// this is the type for Hello variable
declare interface HelloType {
(text: string): void;
new (...args: any[]): Hello;
}
declare var Hello: HelloType;
// can be used as a class
class Hi extends Hello {
bar(b: string): void {
this.foo(b);
}
}
// and as a function
Hello('there');
