Cover Image for [TypeScript] nullable な Array を null安全な型に filter する

[TypeScript] nullable な Array を null安全な型に filter する

この記事は最終更新日から4年以上が経過しています。

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安全な型に詰め替えるとうまくいく