Javascript 在Typescript中扩展抽象类
我有接口,实现这个接口的基本抽象类,以及创建基类新实例的Angular组件中的一些属性。这种构造不会在浏览器中给我错误(可能是因为JS可以承受任何东西),但我得到了TSLint错误 TS2511:无法创建抽象类KitCustomizationBase的实例 如果我删除Javascript 在Typescript中扩展抽象类,javascript,class,typescript,interface,abstract-class,Javascript,Class,Typescript,Interface,Abstract Class,我有接口,实现这个接口的基本抽象类,以及创建基类新实例的Angular组件中的一些属性。这种构造不会在浏览器中给我错误(可能是因为JS可以承受任何东西),但我得到了TSLint错误 TS2511:无法创建抽象类KitCustomizationBase的实例 如果我删除摘要这个词,这个错误就会消失。正如我在TS文档中读到的,抽象类可能包含一些实现的逻辑。有人能解释一下吗 我的界面: export interface KitCustomizationInterface { items: numb
摘要
这个词,这个错误就会消失。正如我在TS文档中读到的,抽象类可能包含一些实现的逻辑。有人能解释一下吗
我的界面:
export interface KitCustomizationInterface {
items: number[];
indexes: number[];
counter: number;
}
我的基类(在没有构造函数的情况下,我得到了相同的错误):
以及我的组件中的代码:
...
let k: KitCustomizationBase = new KitCustomizationBase([], [], 0);
...
更新
重复标记的注意事项:
你所做的事情本身就是一个矛盾。当您将类标记为
abstract
时,您特别禁止实例化。然后你去实例化你的课程。你必须下定决心
- 如果你不想实例化你的类,不要这样做。您必须从现有类派生一个类并实例化它。在TypeScript中,您还可以选择为变量指定一个兼容的对象(称为TypeScript的duck类型)。但是你不需要你的构造函数。你甚至不需要这个类,你的界面会很好
- 如果你想实例化你的类,不要让它抽象。如果一个抽象类不允许它的实例化,那么它的全部意图就是
new
一个抽象类,这是abstract
的要点。我也看不到你在扩展抽象类。可能只是在扩展上重复,然后创建新实例?@WeekendMan我给出了那个链接,因为我可以看出你似乎不理解抽象类的概念。@WeekendMan解决方案非常简单。如果您希望类是抽象的,那么这意味着您不希望能够实例化它。这意味着您应该会遇到编译时错误。正如您所怀疑的,缺少运行时错误也是由于JavaScript没有抽象类的概念。决定您想要的是抽象类还是具体类,并相应地编写代码。谢谢您的帮助。不错+1用于提及由普通对象实现的接口。吻
...
let k: KitCustomizationBase = new KitCustomizationBase([], [], 0);
...