当我从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:类型'Observable'不可分配给 输入'Observable'。输入'boolean | {}'不可分配给 输入'boolean'。 类型“{}”不能分配给“boolean”类型。
有关新打字稿2.4.2或2.6的任何建议吗?
答案 0 :(得分:1)
scan
运算符的输入似乎存在问题,您看,如果您浏览源代码,它实际上是<T, R>
类型,其中R
是类型默认值。但是当您合并示例中的observable时,您会得到一个有效的Observable<boolean>
,因此,您只需键入cast来抑制错误:
this.show_dropdown$ = <Observable<boolean>>Observable.merge... //rest of your code
这是有效的,应该删除问题