在Typescript中扩展抽象类

时间:2017-08-01 08:46:03

标签: javascript class typescript interface abstract-class

我有接口,实现此接口的基本抽象类和Angular组件中的一些属性,用于创建基类的新实例。这种结构不会给我浏览器中的错误(也许是因为它可以代表任何东西),但是我得到了TSLint错误

  

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)关于界面工作的不同时刻。
  2. 此外,我们正在讨论在Google搜索中没有结果的特定TSLint错误。
  3. 重复标记的链接不提供明确的答案。这更像是一个回答“go read docs”。关于究竟是什么的文件?

1 个答案:

答案 0 :(得分:2)

你正在做的事情本身就是一个矛盾。将类标记为abstract时,您明确禁止实例化。然后你去实例化你的课程。你必须下定决心。

  • 如果您不想要实例化您的课程,请不要这样做。您必须从现有类派生一个类并实例化它。在TypeScript中,您还可以选择为变量指定兼容对象(称为structural typing,TypeScript的鸭子打字风格)。但是你不需要你的构造函数。你甚至不需要上课,你的界面也可以。
  • 如果您想要实例化您的课程,请不要将其设为abstract。如果抽象类不允许其实例化的全部意图。