我想定义一个可调用函数foo()
(不是类!我不想在这里使用new
运算符),它也有一个属性foo.bar()
。在简单的JS中,它将如下所示:
function foo() {
// ...
}
foo.prototype.bar = function bar() {
// ...
}
我在TypeScript中尝试使用如下界面:
interface IFoo {
(): any;
bar(): any;
}
const foo: IFoo = function(): any {
// ...
};
foo.prototype.bar = function bar(): any {
// ...
};
但是我收到了一个错误:
error TS2322: Type '() => any' is not assignable to type 'IFoo'.
似乎TS抱怨定义foo
及其属性bar
之间的中间状态,因为foo
还没有属性bar
,因此无法分配到const
类型的IFoo
。
我该如何解决这个问题?
以另一种方式提问:我如何为IFoo
提供实施?
答案 0 :(得分:0)
我找到了使用显式转换的解决方案
interface IFoo {
(): any;
bar(): any;
}
// explicit cast
const foo: IFoo = <IFoo>function(): any {
// ...
};
foo.prototype.bar = function bar(): any {
// ...
};
我不确定这是做到这一点的最好方法......
答案 1 :(得分:0)
如果您只想将foo
作为类型注释,则可以执行以下操作:
const foo = function() {};
foo.prototype.bar = function bar() {};
type IFoo = typeof foo;