为什么在Typescript中抽象类实现和接口必须实现接口

时间:2017-06-16 16:29:04

标签: typescript

   interface baseInter{
      name : string;
      test();
    }

    abstract  class abs implements  baseInter{
    }

在TS编译器中抱怨该类错误地实现了该接口。 abs类型中缺少name。

这里abs是一个抽象类,为什么我们需要在那里实现接口?

2 个答案:

答案 0 :(得分:17)

您需要重新编写界面中的所有成员/方法,并将abstract关键字添加到它们中,因此在您的情况下:

interface baseInter {
    name: string;
    test();
}

abstract class abs implements baseInter {
    abstract name: string;
    abstract test();
}

code in playground

有一个建议:Missing property declaration in abstract class implementing interfaces但由于这个原因被拒绝了:

  

虽然,不写声明的便利性是   很好,这种变化可能带来的混乱/复杂性   不保证。通过审查声明,目前尚不清楚哪个   成员出现在类型上,是所有属性,方法还是   带有呼号的属性;他们会被认为是抽象的吗?   可选?

答案 1 :(得分:2)

您可以通过克服编译时错误的小技巧来获得所需的内容:

interface baseInter {
    name : string;
    test();
}

interface abs extends baseInter {}

abstract class abs implements baseInter{
}

该技巧利用了Typescript的Declaration Merging,最初是在here上展示并发布在相关的SO问题here上。