繁体   English   中英

打字稿错误TS2322:“可观察”类型 <boolean | {}> -Angular 5和打字稿2.4.2

[英]Typescript error TS2322: Type 'Observable<boolean | {}> - Angular 5 & Typescript 2.4.2

试图了解为什么我从4迁移到5时为什么会收到大量打字稿TS2322错误。我已经使用angular cli安装了一个新的ng项目。

Angular CLI: 1.5.5
Node: 8.9.1
OS: darwin x64
Angular: 5.0.4

包JSON是标准配置,以下是代码段。

"core-js": "^2.4.1",
"rxjs": "^5.5.2",
"zone.js": "^0.8.14"
"@angular/core": "^5.0.0",
"tslint": "~5.7.0",
"typescript": "~2.4.2" 

这是我正在测试的组件:

import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
import {Observable} from 'rxjs/Rx';

@Component({
  selector: 'app-sidebar',
  templateUrl: './sidebar.component.html',
  styleUrls: ['./sidebar.component.scss']
})
export class SidebarComponent implements OnInit {
  show_dropdown$: Observable<boolean>;

  @ViewChild('el_dropdown_button') el_dropdown_button: ElementRef;

  constructor() { }

  ngOnInit() {
    // show dropdowng ser
    this.show_dropdown$ = Observable
      .merge(

        // on down arrow click
        Observable
          .fromEvent(this.el_dropdown_button.nativeElement, 'click')
          .scan((value) => !value, false)
          .startWith(false),

        // on input click -> true
        Observable
          .fromEvent(this.el_filter_input.nativeElement, 'click')
          .mapTo(true),
      )
      .startWith(false);
  }
}

我的IDE突出显示this.show_dropdown $并显示错误消息:

错误TS2322:无法将类型“可观察”分配给类型“可观察”。 输入'boolean | {}”不可分配为“ boolean”类型。 类型“ {}”不可分配给类型“布尔”。

关于新打字稿2.4.2或2.6有什么建议吗?

看来, scan运算符的类型存在问题,您会发现,如果您探索源代码,实际上它的类型是<T, R> ,其中R是默认值的类型。 但是,当您在示例中合并可观察对象时,您将获得一个有效的Observable<boolean> ,因此,只需键入强制转换即可抑制该错误:

this.show_dropdown$ = <Observable<boolean>>Observable.merge... //rest of your code

这是有效的,应该消除问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM