Array.prototype.filterを使用して配列からヌル(未定義)要素をフィルタリングしようとしていますが、TypeScriptコンパイラが "filter"関数の派生配列を認識せず、型チェックに失敗しました。TypeScriptコンパイラに指示する方法Array.prototype.filterは配列から特定の型を削除しますか?
(number | undefined)[]型の配列を持ち、number []配列に収まるようにundefinedをフィルタしたい場合、次のような単純なコードを仮定します。
const arry = [1, 2, 3, 4, "5", 6];
const numArry: number[] = arry
.map((i) => {
return typeof i === "number" ? i : void 0;
})
.filter((i) => i);
エラーは言う:
タイプ '(数|未定義)[]' '番号を[]' 型に代入ではありませんが。 タイプ 'number | undefined 'は' number '型に割り当てられません。 タイプ 'undefined'はタイプ 'number'に割り当てられません。
私は結果の配列を数値[]にキャストすることができます。
const arry = [1, 2, 3, 4, "5", 6];
const numArry: number[] = (arry
.map((i) => {
return typeof i === "number" ? i : void 0;
})
.filter((i) => i) as Number[]);
キャスティング以外の方法がありますか?
環境:strictNullChecksを有効にしたTSC2.1。
あなたはどのタイプのタイスクリプトですか?あなたの初期コードはTS 2.0.9で修正なしで私にとってうまく動作します – Paarth
この問題は--strictNullChecksと仮定しています – artem
この問題は部分的に[どのように型ガードが配列上のフィルターに伝播されず、代わりにReadonlyArraysだけでhttps://github.com/Microsoft/TypeScript/pull/10916)。 – y2bd