Невозможно вызвать выражение, тип которого не имеет подписи вызова. Тип не имеет совместимых подписей вызовов 2349 - PullRequest
0 голосов
/ 02 января 2019

Попытка вызвать геттер и сеттер в моем сервисе и получить ошибку: Cannot invoke an expression whose type lacks a call signature. Type 'Boolean' has no compatible call signatures 2349

toggleNav(): void {
    this.sidebarService.sidebarStatus.pipe(
        concatMap((bool: boolean) => this.sidebarService.updateStatus(bool))
    );
}

Прочитав несколько SO-страниц об этом, я еще не прочитал простой ответ. Может кто-нибудь объяснить, что означает эта ошибка на простом английском языке?

Вот установщики и получатели:

private _sidebarStatus = new BehaviorSubject<boolean>(true);

public get sidebarStatus(): Observable<boolean> {
    return this._sidebarStatus.asObservable();
}
public set updateStatus(bool: boolean) {
    this._sidebarStatus.next(bool);
}

1 Ответ

0 голосов
/ 02 января 2019

Если вы собираетесь использовать свойства (как вы определяете с помощью get / set), тогда вам просто нужно назначить свойство, когда вы хотите установить его, вызов установщика произойдет автоматически.

this.sidebarService.sidebarStatus.pipe(
    concatMap((bool: boolean) => this.sidebarService.updateStatus = bool)
);

Ошибка, которую вы получаете, состоит в том, что компилятор обрабатывает this.sidebarService.updateStatus как логическое поле (как и должно быть, get / set является деталью реализации, свойства ведут себя так же, как синтаксически, как любое поле) итаким образом, вы не можете вызвать логическое значение.

Вы также можете отбросить set, а затем вы можете вызвать updateStatus, как вы пытаетесь это сделать, поскольку это будет обычный метод, а не метод установки свойств:

public updateStatus(bool: boolean) {
    this._sidebarStatus.next(bool);
}
this.sidebarService.sidebarStatus.pipe(
    concatMap((bool: boolean) => this.sidebarService.updateStatus(bool)) // ok now
);

Подробнее о средствах доступа к собственности вы можете узнать здесь под заголовком Средства доступа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...