是否可以在基类中使用函数,但在子类中使用lambda函数?

时间:2014-09-05 10:15:50

标签: typescript

我正在使用具有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看起来像界面,可能是因为它有效吗?

1 个答案:

答案 0 :(得分:3)

如果你使用implements,你实际上不会从基类继承 - 所以如果那个基类有你希望访问的其他属性和方法,你会发现它们都不在你身上{{1 }。class。

使用Test1时,您必须实现结构中指定的所有属性和方法。

以下是已编译的JavaScript:

implements

如果使用var Foo = (function () { function Foo() { this.foo = function () { }; } return Foo; })(); ,编译器将发出使用基类的方法和属性扩展extends类的其他代码。

使用Test1时,您可以选择覆盖方法,但不必在从基类继承它们时实现所有成员。

以下是已编译的JavaScript(您可以看到其他代码):

extends