Angular 2 DI编码到接口

时间:2016-01-18 07:58:45

标签: javascript angular

使用新的角度2 DI我们可以做到这一点:

import HeroService from './HeroService';

bootstrap(AppComponent, [provide(HeroService,{useClass:HeroService})]);

有一种方法可以编码接口,所以我们可以这样做吗?

// typescript does not compile interfaces to plain js, we can use this in the provide function?
interface SomeInterface { name: string }

class HeroService implements SomeInterface {}

bootstrap(AppComponent, [provide(SomeInterface,{ useClass: HeroService })]);

// component
class myComponent {

    constructor(hero: SomeInterface) {}

}

1 个答案:

答案 0 :(得分:2)

我不确定这种方法是否可行,因为接口在运行时在TypeScript中被擦除并且可以被引用。

如果您在服务中尝试此操作:

export interface SomeInterface {
  someMethod();
}

export class HeroService implements SomeInterface {
  (...)
}

尝试从其他模块导入时,我们将会定义:

import {HeroService,SomeInterface} from './hello.service';

console.log('service = '+HeroService); // <---- not null
console.log('interdace = '+SomeInterface); // <---- undefined

这是一个描述这个问题的傻瓜:https://plnkr.co/edit/RT59B0tw40lnq85XMMi7?p=preview

这个答案还可以给你一些额外的提示:Interface based programming with TypeScript, Angular 2 & SystemJS

希望它可以帮到你, 亨利