在Angular2中将类导出为接口

时间:2017-04-23 14:05:07

标签: angular typescript angular2-services

有没有办法将类导出为接口,然后在Angular 2中的另一个模块中导入该接口?我需要能够在一些组件的构造函数中注入类,例如应该注册为提供者。

1 个答案:

答案 0 :(得分:5)

为了用作接口和提供者令牌,它可以是抽象类。这是在Angular代码库本身中完成的。

如果具体类具有从抽象类继承的东西,后者可以是可扩展的:

export abstract class Foo {
  abstract bar();

  baz() { ... }
}

export class ConcreteFoo extends Foo {
  bar() { ... }
}

...
provider: [{ provide: Foo, useClass: ConcreteFoo }]
...

否则,使抽象类不可扩展且不可实例化更安全:

export abstract class Foo {
  private constructor() {
    throw new Error('should not be instantiated directly');
  }

  abstract bar();
}

export class ConcreteFoo implements Foo {
  bar() { ... }
}

应该注意的是,任何类都可以用作TypeScript中的接口。因此,如果没有真正需要区分接口和实现,它可能只是一个具体的类:

export class Foo {
  bar() { ... }

  baz() { ... }
}

...
provider: [Foo]
...

如有必要,以后可以将其用作界面:

export class SomeFoo implements Foo { ... }

...
provider: [{ provide: Foo, useClass: SomeFoo }]
...