interface baseInter{
name : string;
test();
}
abstract class abs implements baseInter{
}
在TS编译器中抱怨该类错误地实现了该接口。 abs类型中缺少name。
这里abs是一个抽象类,为什么我们需要在那里实现接口?
答案 0 :(得分:17)
您需要重新编写界面中的所有成员/方法,并将abstract
关键字添加到它们中,因此在您的情况下:
interface baseInter {
name: string;
test();
}
abstract class abs implements baseInter {
abstract name: string;
abstract test();
}
有一个建议: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上。