我有一个可调用和可扩展的javascript函数/类。我们说它的名字是Hello
。
Hello
可以通过以下两种方式之一使用:
class Hi extends Hello { }
或
Hello('there');
我如何编写Hello
的类型,以便TypeScript知道它既可调用又可扩展?
答案 0 :(得分:4)
执行此操作的方法是将Hello
声明为具有类型的变量,该类型是具有可调用和构造函数签名的接口:
// 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');