为什么在Typescript中的抽象类实现和接口必须实现接口中的所有方法

Jer*_*eph 16 typescript

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

    abstract  class Abs implements  baseInter{
    }
Run Code Online (Sandbox Code Playgroud)

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

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

Nit*_*mer 25

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

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

abstract class abs implements baseInter {
    abstract name: string;
    abstract test();
}
Run Code Online (Sandbox Code Playgroud)

(游乐场代码)

有一个建议:在抽象类实现接口时缺少属性声明,但由于这个原因它被拒绝了:

虽然,不写声明的便利性会很好,但这种变化可能造成的混乱/复杂性并不能保证.通过检查声明,不清楚哪些成员出现在类型上,是所有具有呼叫签名的属性,方法或属性; 他们会被认为是抽象的吗?可选的?


mat*_*tar 9

你可以通过一个克服编译时错误的小技巧得到你想要的:

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

interface abs extends baseInter {}

abstract class abs implements baseInter{
}
Run Code Online (Sandbox Code Playgroud)

这一招利用打字稿的的宣言合并,最初呈现在这里,并在相关的SO问题贴在这里