🐙

[TypeScript] 配列のnullableな要素を除去

2022/09/12に公開

この記事を見て、もう少しシンプルな方法は無いか考えてみました。
https://zenn.dev/lollipop_onl/articles/eoz-ts-non-nullable

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