2016-11-07 1 views
1

Я ищу, чтобы попробовать, который имеет этот фильтр:Rxjs фильтр shiftKey

Observable.fromEvent(this.getNativeElement(this.btn), 'click') 
     .filter(event => event.shiftKey) 
     .map(event => 'Beast Mode Activated!!!') 
     .subscribe(message => this.message = message); 

Это один ссылки "rxjs": "5.0.0-beta.5"

В моем проекте я получаю сообщение об ошибке:

[ts] Property 'shiftKey' does not exist on type '{}'. any

Я ссылаюсь на "rxjs": "5.0.0-beta.12"

У меня такая же ошибка в обоих случаях.

это то, что я получил в импорте:

import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/observable/fromEvent'; 
import 'rxjs/add/operator/filter'; 
import 'rxjs/add/operator/map'; 

ответ

2

Потому что нет никакого типа информации о event

.filter(event => event.shiftKey) 

он просто рассматривается как {} типа. Вы можете «лить» его или указать тип

.filter((event: any) => 
.filter((event: ExpectedEventType) => 
.filter(event => (<any>event).shiftKey) 

Любой из них должен работать. С ExpectedEventType он должен быть заменен фактическим типом события. Это только в том случае, если вам нужна сильная типизация. Если это не проблема, использование any должно быть прекрасным.

+0

Теперь мне нужно поставить '.filter (event => ( event) .shiftKey)', который выглядит немного проводным. Есть ли способ сохранить '.filter (event => event.shiftKey)'? – sreginogemoh

+0

Это ошибка компиляции TypeScript. AFAIK, нет способа. Даже если бы был способ подавить его, зачем вам это нужно? Просто используйте тип '(event: any)', если вы хотите немного более чистого вида –

+0

OK Я вижу. но как использовать u (event: any) '? Не могли бы вы предоставить образец – sreginogemoh