Angular “打字脚本错误”;不正确地实现接口“;类型';主题<;布尔值>';不可分配给类型';主题<;布尔值>';
Angular 2&Typescript应用程序 我在NPM包中有一个抽象类,我试图在我的应用程序代码中为其提供实现。在我添加publicAngular “打字脚本错误”;不正确地实现接口“;类型';主题<;布尔值>';不可分配给类型';主题<;布尔值>';,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
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中,您无法注入接口,因为在运行时它们不存在。使用“类接口”的这种技术就是解决方案。抽象类是可注入的,允许使用自定义实现覆盖成员。