javascript - Angular 2 DI 编码到接口(interface)

标签 javascript angular

通过新的 Angular 2 DI,我们可以做到这一点:

import HeroService from './HeroService';

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

有一种方法可以对接口(interface)进行编码,这样我们就可以做到这一点吗?

// 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) {}

}

最佳答案

我不确定这种方法是否可行,因为接口(interface)在 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

这里有一个 plunkr 描述了这一点:https://plnkr.co/edit/RT59B0tw40lnq85XMMi7?p=preview .

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

希望对你有帮助 蒂埃里

关于javascript - Angular 2 DI 编码到接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34849729/

相关文章:

javascript - 将响应传递给 $q promise 的第二个 `then`

javascript - 如何在 Angularjs2 中使用 jquery 设置输入值并更新模型值?

python - 显式等待在基于 Angular 的 PayPal 沙箱上不起作用

javascript - 当对象移出 Canvas t-rex 时的奇怪行为

javascript - jquery/javascript - 如何比较数组、检索数组)与最大元素数?

javascript - 可以在 Web 浏览器中捕获所有事件吗?

javascript - 刷新图像或清除缓存

javascript - 参数用于过滤数组的属性

Angular2 APP_INITIALIZER 嵌套 http 请求

angular - 如何获取 Angular 5 中的版本