2016-11-07 68 views
1

我期待在品尝它有此过滤器:Rxjs过滤Shift键,

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,没有办法。即使有办法压制它,你为什么要?只要使用'(事件:任何)'类型',如果你想要一个更清洁的外观 –

+0

好吧,我明白了。但你将如何使用'(event:any)'?你能否提供样品 – sreginogemoh