在Typescript中扩展抽象类
我有接口,实现此接口的基抽象类以及创建基类的新实例的Angular组件中的一些属性。这种结构不给我的错误在浏览器中(也许是因为它是经得起任何的JS),但我得到了TSLint错误在Typescript中扩展抽象类
TS2511:无法创建抽象类的实例KitCustomizationBase
如果我删除abstract
字,该错误消失。
正如我在TS文档中看到的抽象类可能包含一些实现的逻辑。
有人可以解释它吗?
我的界面:
export interface KitCustomizationInterface {
items: number[];
indexes: number[];
counter: number;
}
我的基类(我越来越没有构造相同的错误):
import { KitCustomizationInterface } from '...';
export abstract class KitCustomizationBase implements KitCustomizationInterface {
public items: number[];
public indexes: number[];
public counter: number;
constructor(items: number[], indexes: number[], counter: number) {
this.items = items;
this.indexes = indexes;
this.counter = counter;
}
}
而且从我的组件代码:
...
let k: KitCustomizationBase = new KitCustomizationBase([], [], 0);
...
重复标记的注意事项:
1. Angular拥有(因为TS)不同的时刻abo与接口一起工作。
2.此外,我们正在讨论在Google搜索中没有结果的特定TSLint错误。
3.复制标记给出的链接没有提供明确的答案。这更像是一个答案“去阅读文档”。有关具体内容的文档?我问了具体的错误,我得到了答案,谢谢大家的帮助。
你在做什么本身就是一个矛盾。当您将课程标记为abstract
时,您明确禁止实例化。然后你去实习你的班级。你必须下定决心。
- 如果你不想实例化你的类,不要这样做。你必须从你现有的类派生一个类并实例化它。在TypeScript中,您还可以选择将兼容对象分配给变量(称为structural typing,TypeScript的鸭子打字风格)。但是你不需要你的构造函数。你甚至不需要这个类,你的界面将会很好。
- 如果您想实例化您的课程,请不要使其成为
abstract
。如果抽象类不允许实例化,那么整个意图就是这样。
感谢您的帮助。 – WeekendMan
还不错。用于提及由普通对象实现的'interface'的+1。吻 –
你不能'new'抽象类,这是'abstract'的主要观点。我也没有看到你扩展抽象类。 –
[Interface vs Abstract Class(general OO)]的可能重复](https://stackoverflow.com/questions/761194/interface-vs-abstract-class-general-oo) –
只有通过扩展然后创建新实例? – WeekendMan