2016-08-27 12 views
0
let _fiveElems: [Value, Value, Value, Value, Value] 
let _threeElems: [Value, Value, Value] 
_threeElems = _fiveElems.filter(// some code that will filter down to three elements) 

は、どのように私はこのコンパイラエラー?:活字体Array.filterの戻り値の型

タイプ「値[]」「[値、値、値を]」型に代入されていないことを避けることができます。

私はValue[]_threeElemsの種類を設定することができますが、私はそれが正しい感じていないので、それは3つの要素が返されます知っています。

答えて

0

:あなたは本当にフィルタは3つの要素を返すこと確認をしている場合、

function safeArrayCast<T>(arr: T[]) : [T, T, T]{ 
    if (arr.length !== 3) { 
    throw new Error("Array is not length of 3"); 
    } 
    return <any>arr; 
} 

let _fiveElems: [Value, Value, Value, Value, Value]; 

let _threeElems: [Value, Value, Value]; 

_threeElems = safeArrayCast(_fiveElems.filter(predicate)); 

かを、あなたはそれをカットすることができます余分なチェック:

_threeElems = <any>_fiveElems.filter(predicate); 

しかし、これらの安全でないキャストを使用すると、基本的にあなたのタイプセーフティーが破られることに注意してください。

0

TypeScriptは強く型付けされており、値を返すことについての知識は実際には関係ありません。 filterは一般的に可変長配列を返すことができるため、戻り値をValue[]の変数に遵守して割り当てる必要があります。 インデックス配列中は、何でもできます。したがって、3つの要素があると確信が持てる場合は、配列_threeElemsに割り当てることができます。

強くタイピングは、実際に多くの人がTypeScriptを愛することです。あなたは、配列の長さをチェックして、実行時に危険なキャストを行う機能を使用することができ

関連する問題