2017-12-01 3 views
0

나는 각 CLI를 사용하여 새 NG 프로젝트를 설치 한 5 4에서 마이그레이션 할 때 내가 타이프 라이터 TS2322 오류의 부하를 얻을 이유를 이해하려고 노력입력 오류 TS2322 : 유형 'Observable <boolean | {}> - 각도 5 타이프 라이터 2.4.2

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

JSON 패키지가 표준이며, 여기에 스 니펫이 있습니다.

error TS2322: Type 'Observable' is not assignable to type 'Observable'. Type 'boolean | {}' is not assignable to type 'boolean'. Type '{}' is not assignable to type 'boolean'.

새로운 타이프 2.4에 대한 어떤 제안을 : 없다는 오류와 $ this.show_dropdown

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 하이라이트 : 여기

"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" 

내가 테스트입니다 내 구성 요소입니다 .2 또는 2.6?

+0

왜 사용을 제거해야합니다을 '(click) = method ($ event)'대신 관측 가능한 리스너, 특히 구현시 Observables를 모두 사용하는 경우? –

+0

몇 가지 이유가있을 수 있습니다. 이 작은 설명 상자에서 설명하기에는 너무 많은 시간이 걸릴 것입니다. 하지만 필터가있는 큰 응용 프로그램을 사용하면 RXJS를 좋아하고 사용하게됩니다. –

+0

Rx를 좋아하고 많은 데이터가있는 큰 응용 프로그램을 사용합니다. 무엇이든을 위해 사용중인기구의 원리를 위반하는 것은 나쁜 디자인이다. 하지만 어쨌든, 아마도 당신을 위해 대답을했습니다. –

답변

1

scan 연산자의 입력에 문제가있는 것처럼 보입니다. 소스를 탐색 할 경우 실제로는 <T, R> 유형이며, 여기서 R은 기본값 유형입니다. 당신이 당신의 예에서 관찰 가능한을 병합 할 때, 당신은 유효한 Observable<boolean>를 얻을 수 있으므로, 당신은 단지 오류 억제 캐스팅 입력 할 수 있습니다

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

이 유효하며 문제를