Javascript 无法调用其类型缺少调用签名的表达式。类型没有兼容的调用签名2349
尝试在我的服务中调用getter和setter并获取错误:Javascript 无法调用其类型缺少调用签名的表达式。类型没有兼容的调用签名2349,javascript,typescript,rxjs,Javascript,Typescript,Rxjs,尝试在我的服务中调用getter和setter并获取错误: 无法调用其类型缺少调用签名的表达式。类型“Boolean”没有兼容的呼叫签名2349 toggleNav(): void { this.sidebarService.sidebarStatus.pipe( concatMap((bool: boolean) => this.sidebarService.updateStatus(bool)) ); } 在读了几页关于这个的文章之后,我还没有读到一个
无法调用其类型缺少调用签名的表达式。类型“Boolean”没有兼容的呼叫签名2349
toggleNav(): void {
this.sidebarService.sidebarStatus.pipe(
concatMap((bool: boolean) => this.sidebarService.updateStatus(bool))
);
}
在读了几页关于这个的文章之后,我还没有读到一个简单的答案。有人能解释一下这个错误在普通英语中的意思吗
这里是二传手和传接手:
private _sidebarStatus = new BehaviorSubject<boolean>(true);
public get sidebarStatus(): Observable<boolean> {
return this._sidebarStatus.asObservable();
}
public set updateStatus(bool: boolean) {
this._sidebarStatus.next(bool);
}
private\u sidebarStatus=新行为主体(true);
public get sidebarStatus():可观察{
返回此项。_sidebarStatus.asObservable();
}
公共集updateStatus(bool:boolean){
这个。_sidebarStatus.next(bool);
}
如果要使用属性(正如您使用get
/set
定义的那样),那么您只需在需要设置属性时分配属性,就会自动调用setter
this.sidebarService.sidebarStatus.pipe(
concatMap((bool: boolean) => this.sidebarService.updateStatus = bool)
);
您遇到的错误是因为编译器将this.sidebarService.updateStatus
视为布尔字段(应该是这样的,get/set是一个实现细节,属性的行为与任何字段的语法相同),因此您无法调用布尔值
您还可以删除集合
,然后在尝试调用updateStatus
时调用它,因为它只是一个常规方法,而不是属性设置程序:
public updateStatus(bool: boolean) {
this._sidebarStatus.next(bool);
}
this.sidebarService.sidebarStatus.pipe(
concatMap((bool: boolean) => this.sidebarService.updateStatus(bool)) // ok now
);
在“访问者”标题下,您可以了解更多有关属性访问者的信息谢谢Titian,这是一个信息性的主题。但它给出了类型为“(bool:boolean)=>void”的
参数不可分配给类型为“(value:boolean,index:number)=>ObservableInput”的参数。类型“void”不能分配给类型“observeInput”。ts(2345)
@TR3B可能concatMap((bool:boolean)=>{this.sidebarService.updateStatus(bool)})
这是您得到错误的那一行吗?是的,这是错误所在one@TR3B您是否尝试过使用额外的{}
正如上面的评论一样?@TR3B我没有为此创建一个完整的示例,但我希望它能起作用。。我将返回一个包含的示例