2017-04-27 5 views
0

ブロークン・コードを説明することはできません。型スクリプトエラーです。固定されているが、それは

ngOnInit(){ 
    Observable.fromEvent(this.el.nativeElement, 'keyup') 
    .map((e:any) => {e.target.value}) 
    .filter((text:string) => text.length < 3) 
    .debounceTime(250) 
    .do(() => this.loading.next(true)) 
    //search youtube 
    .map((query: string)=> {this.youtube.search(query)}) 
} 

エラー:

[TS]型パラメータ「T」の型引数は、使用状況から推測することはできません 。型引数を明示的に指定することを検討してください。 型引数候補 'void'は、候補 '文字列'のスーパータイプではないため、有効な型引数ではありません。 任意の

修正:

私はe.target.value(3行目)から中括弧を削除すると、すべてがOKです。なぜそれが事実だろうか?

答えて

1

ここでC#の背景から来ていますが、同じロジックがTypeScriptに当てはまると思います。

中括弧は、ラムダ内に複数のコード行を入力することができます。あなたは、コードブロックがmap機能の要件を満たすために値を返すように、中括弧を使用しているときreturn e.target.value;を使用する必要があることを意味

.map((e:any) => { 
    console.log('Hello'); 
    return e.target.value; 
}) 

中括弧を使用しない場合、結果としてに暗黙的に返されたe.target.valueが返されるため、returnを含める必要はありません。

(param1, param2, …, paramN) => { statements } 
(param1, param2, …, paramN) => expression 

異なることが推測さtsc戻り値の型を作る:

0

彼らは、すなわちES6 arrow functionの2つの構文に対応

.map((e:any) => {e.target.value}) 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    an arrow function that have no return, and effectively returns undefined. 
    TypeScript compiler infers such function to have return type "void". 

.map((e:any) => e.target.value) 
    ~~~~~~~~~~~~~~~~~~~~~~~~~ 
    an arrow function that returns e.target.value 
    the compiler inters the return type to be "any" 
+0

は多くの意味を行います。ありがとう。 – scriptain

関連する問題