使用新的角度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) {}
}
答案 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。
希望它可以帮到你, 亨利