我正在使用具有d.ts定义的第三方api,其中类具有如此声明的函数:
export class Bar {
foo(): void;
}
现在当我创建一个子类的实现时,我想使用lambda函数语法
export class Test1 extends Bar {
public foo = (): void => {
//DO Stuff
}
}
这不会编译,因为
“Class'Test1'定义了实例成员属性'foo',但扩展了 class'Bar'将其定义为实例成员函数。“
我是否需要更改Bar-class的定义才能使用lambda函数?我不愿意,所以如果有其他解决方案我会很感激帮助!
更新
好的,所以我发现了一些东西。如果我而不是extends
使用implements
,我可以在Test1中使用lamdba函数。对我来说,实现一个类听起来很奇怪。 Bar-class看起来像界面,可能是因为它有效吗?
答案 0 :(得分:3)
如果你使用implements
,你实际上不会从基类继承 - 所以如果那个基类有你希望访问的其他属性和方法,你会发现它们都不在你身上{{1 }。class。
使用Test1
时,您必须实现结构中指定的所有属性和方法。
以下是已编译的JavaScript:
implements
如果使用var Foo = (function () {
function Foo() {
this.foo = function () {
};
}
return Foo;
})();
,编译器将发出使用基类的方法和属性扩展extends
类的其他代码。
使用Test1
时,您可以选择覆盖方法,但不必在从基类继承它们时实现所有成员。
以下是已编译的JavaScript(您可以看到其他代码):
extends