我试图使用数组从数组中过滤空(未定义)元素.原型filter,但TypeScript编译器似乎无法识别"filter"函数的派生数组,无法通过类型判断.
假设下面的简化代码中有一个数组的(number | undefined)[]类型,并希望筛选未定义的数组以适应number[]array.
const arry = [1, 2, 3, 4, "5", 6];
const numArry: number[] = arry
.map((i) => {
return typeof i === "number" ? i : void 0;
})
.filter((i) => i);
错误显示:
类型"(编号|未定义)[]"不能分配给类型"编号[]".
我可以将生成的数组强制转换为如下所示的数字[],知道filter函数删除未定义的内容.
const arry = [1, 2, 3, 4, "5", 6];
const numArry: number[] = (arry
.map((i) => {
return typeof i === "number" ? i : void 0;
})
.filter((i) => i) as Number[]);
除了铸造,还有更好的方法实现这一点吗?
环境:TSC2.1已启用strictNullChecks.