2017-05-08 57 views
2

我建设我angular2服务,像这样角编译器会引发内部错误:未知标识符{}

import { OpaqueToken, ClassProvider } from "@angular/core"; 
 

 
export interface IService { 
 
    // ... interface declaration 
 
} 
 

 
export class Service implements IService { 
 
    // ... implementation goes here 
 
} 
 

 
export const IService = new OpaqueToken(Service.name); 
 

 
export const ServiceProvider: ClassProvider = { 
 
    provide: IService, 
 
    useClass: Service, 
 
};

这工作,并编制奇妙使用NGC与角度为2.xx 但经过升级到角色4.xx时,ServiceProvider在组件的提供者数组中使用时不能再进行ngc编译。 (有趣的是,当供应商登记在ngModule,而不是在一个组件整个事情的作品。)

我得到以下我的控制台上:

events.js:160 throw er; // Unhandled 'error' event ^Error: Command failed: npm run ngc Error: Internal error: unknown identifier {}

任何想法是怎么回事?我可以将我的服务@Injectable(),而不是使用界面,但似乎有悖于使用服务接口:(

FYI的整体思路:我用的打字稿2.2.2

谢谢你的帮助!

回答

1

不幸的是,用InjectionToken替换OpaqueToken并不能解决问题。然而 什么了,是使用抽象类而不是接口注射令牌

根据这个回答Angular 2 Injectable Interface?这是一个常用的方法(也被角色团队自己使用)来注入抽象类并将它们用作接口。

import { ClassProvider } from "@angular/core"; 
 

 
export abstract class IService { 
 
    // ... interface declaration 
 
} 
 

 
export class Service implements IService { 
 
    // ... implementation goes here 
 
} 
 

 
export const ServiceProvider: ClassProvider = { 
 
    provide: IService, 
 
    useClass: Service, 
 
};

相关问题