この記事を見て、もう少しシンプルな方法は無いか考えてみました。
arr.filter((item) => item != null);
JavaScript ではこの実装で問題ありませんが、 TypeScript で同様のコードを実行すると型情報上に nullable が残ってしまいます。
reduceを使う
あまり推奨できません。
const arr = [0, 1, 'hello', false, null, undefined];
arr.reduce((a: (number | string | boolean)[], c) => (c != null ? [...a, c] : [...a]),[]);
// [ 0, 1, "hello", false ]
// ts: (string | number | boolean)[]
flatMapを使う
nullable要素を空配列[]
に。最後にflatして空配列を削除。
実行速度を計測しましたが、filter式, reduce式と変わりませんでした。
const arr = [0, 1, 'hello', false, null, undefined];
arr.flatMap(e => e != null ? e : []);
// [ 0, 1, "hello", false ]
// ts: (string | number | boolean)[]
Discussion