Angular “打字脚本错误”;不正确地实现接口“;类型';主题<;布尔值>';不可分配给类型';主题<;布尔值>';

Angular “打字脚本错误”;不正确地实现接口“;类型';主题<;布尔值>';不可分配给类型';主题<;布尔值>';,angular,typescript,rxjs,Angular,Typescript,Rxjs,Angular 2&Typescript应用程序 我在NPM包中有一个抽象类,我试图在我的应用程序代码中为其提供实现。在我添加publicisLoggedIn:Subject之前,这一切都很顺利属性 当前用户.service.ts @Injectable() export abstract class CurrentUserContextService { public isLoggedIn:Subject<boolean>; public userId:string; publi

Angular 2&Typescript应用程序

我在NPM包中有一个抽象类,我试图在我的应用程序代码中为其提供实现。在我添加public
isLoggedIn:Subject之前,这一切都很顺利属性

当前用户.service.ts

@Injectable()
export abstract class CurrentUserContextService {

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

constructor() {  }

}
@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.

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

类“MyCurrentUserContextFactoryService”不正确地实现了接口“CurrentUserContextFactoryService”。 属性“currentUserContext”的类型不兼容。 类型“MyCurrentUserContextService”不可分配给类型“CurrentUserContextService”。 属性“isLoggedIn”的类型不兼容。 类型“Subject”不可分配给类型“Subject”。
属性“destination”受保护,但类型“Subject”不是从“Subject”派生的类。

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

Angular 2快速启动项目没有问题,但Angular CLI会毫无故障地产生错误


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

您可以使用
extends
而不是
implements
?因为这是一个库,我需要强制开发人员使用它来提供实现,extends不会强制执行。这个例子很简单,我还有其他类,它们的方法期望开发人员提供实现。嗯,因为您将基类型声明为
class
,而不是
interface
,并且
implements
应该只用于
接口
。那么,为什么不将希望开发人员实现的接口分离到另一个
接口
,并将这些具体的基类实现保留在当前基类中呢?使用接口的问题在于,在Angular 2 DI中,您无法注入接口,因为在运行时它们不存在。使用“类接口”的这种技术就是解决方案。抽象类是可注入的,允许使用自定义实现覆盖成员。