2017-08-01 99 views
-3

我有接口,实现此接口的基抽象类以及创建基类的新实例的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.复制标记给出的链接没有提供明确的答案。这更像是一个答案“去阅读文档”。有关具体内容的文档?我问了具体的错误,我得到了答案,谢谢大家的帮助。

+10

你不能'new'抽象类,这是'abstract'的主要观点。我也没有看到你扩展抽象类。 –

+0

[Interface vs Abstract Class(general OO)]的可能重复](https://stackoverflow.com/questions/761194/interface-vs-abstract-class-general-oo) –

+0

只有通过扩展然后创建新实例? – WeekendMan

回答

2

你在做什么本身就是一个矛盾。当您将课程标记为abstract时,您明确禁止实例化。然后你去实习你的班级。你必须下定决心。

  • 如果你不想实例化你的类,不要这样做。你必须从你现有的类派生一个类并实例化它。在TypeScript中,您还可以选择将兼容对象分配给变量(称为structural typing,TypeScript的鸭子打字风格)。但是你不需要你的构造函数。你甚至不需要这个类,你的界面将会很好。
  • 如果您想实例化您的课程,请不要使其成为abstract。如果抽象类不允许实例化,那么整个意图就是这样。
+0

感谢您的帮助。 – WeekendMan

+0

还不错。用于提及由普通对象实现的'interface'的+1。吻 –