🔖
[TypeScript]filterメソッドでundefinedを含む配列からundefinedを取り除くときの型定義
const samples: (string | undefined)[] = ["a", undefined, "b", undefined, "c"];
// 実際の戻り値は string[] だが、戻り値の型が (string | undefined)[] になってしまう
const filteredSample1 = samples.filter((sample) => typeof sample == "string");
console.log(filteredSample1); // ["a", "b", "c"]
// 戻り値の型が string[] になる
const filteredSample2 = samples.filter(
(sample): sample is string => typeof sample == "string",
);
console.log(filteredSample2); // ["a", "b", "c"]
Discussion