2017-05-08 84 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, 
 
};

相關問題