typescript初心者です
filterの型推論で実装と差が出て、少し戸惑ったのでメモ
※追記 @sdkeiさんからご指摘いただき修正いたしました。ありがとうございました
問題
数値とnullが混在した配列からnullを除去することを考える
const numList = [0, 1, 2, null, 3].filter((x) => x !== null);
このときnumListの型推論ははnumber[]
になって欲しいが、(number | null)[]
になってしまう
解決法
T[].fillter(predicate: (value: T, index: number, array: T[]) => boolean): T[]
の返り値の型はT[]
型となるので、型推論できない
型アサーションを使って型を指定する
const numList = [0, 1, 2, null, 3].filter((x) => x !== null) as number[];
numListの型はnumber[]
になる