有没有办法将类导出为接口,然后在Angular 2中的另一个模块中导入该接口?我需要能够在一些组件的构造函数中注入类,例如应该注册为提供者。
答案 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 }]
...