[TypeScript] nullable な Array を null安全な型に filter する
この記事は最終更新日から5年以上が経過しています。
TL;DL
- filter ではnull安全な型にできない
- reduce null安全な型に詰め替える必要がある
- null でも undefined でも同様
code
const nullables: (string | null)[] = ["a", null, "c"]
const nonNullables: string[] = nullables.filter(
(item: string | null) => item !== null)
) // !ERROR!
普通に考えるとこうやりたくなるが、これだと filter の戻り値が string | null
のため目的を達成できない
const nullables: (string | null)[] = ["a", null, "c"]
const nonNullables: string[] = nullables.reduce((prev, current) => {
if (current) {
return prev.concat(current)
}
return prev
}, Array<string>())
このように、filter ではなく reduce でnull安全な型に詰め替えるとうまくいく
[TypeScript] nullable な Array を null安全な型に filter する