打字稿错误“错误地实现接口”类型'Subject<boolean>'不能分配给类型'Subject<boolean>'

Angular 2和Typescript应用程序 .

我在NPM包中有一个抽象类,我试图在我的应用程序代码中提供实现 . 这一切都很好,直到我添加了公共 isLoggedIn:Subject<boolean>; 属性 .

current-user.service.ts

@Injectable()
export abstract class CurrentUserContextService {

public isLoggedIn:Subject<boolean>;
public userId:string;
public userName:string;
public email:string;
public scope:string[];

constructor() {  }

}

my-current-user.service.ts

@Injectable()
export class MyCurrentUserContextService implements CurrentUserContextService {

// interface properties.
public isLoggedIn:Subject<boolean>;
public userId: string;
public userName: string;
public email: string;
public scope: string[];

// add custom properties as needed.


constructor() { }

}

// add custom methods as needed.

}

main.ts

bootstrap(AppComponent, [    
MyCurrentUserContextService,
{provide: CurrentUserContextService, useExisting: MyCurrentUserContextService}
])

Error

类'MyCurrentUserContextFactoryService'错误地实现了接口'CurrentUserContextFactoryService' . 属性“currentUserContext”的类型不兼容 . 类型'MyCurrentUserContextService'不能分配给'CurrentUserContextService'类型 . 属性'isLoggedIn'的类型不兼容 . “主题”类型不能指定为“主题”类型 . 属性“目标”受到保护,但“主题”类型不是从“主题”派生的类 .

回答(1)

2 years ago

我发现了问题的根源...... Angular CLI&Broccoli!在花了一些时间整理一些项目以重现这个问题之后,我决定除了CLI生成的项目之外还使用Angular 2快速启动 .

Angular 2快速启动项目没有问题,但Angular CLI会产生错误 .

因此,通过从我的工具链中删除CLI并编写自己的工具代码,我可以获得可靠的TypeScript应用程序编译 .