写了一个过滤空字段的方法,希望入参允许数组和对象,把其中不为空的元素筛选出来,但是在使用filter方法时提示错误
报错截图如下
代码截图
代码
function filterEmptyKey (param: any[] | object): any[] | object {
const type = getDataType(param);
if (type === 'array') {
// ts中filter方法会报错
return param.filter(value => !isNull(filterEmptyKey(value)));
} else if (type === 'object') {
return Object.keys(param).filter(key => !isNull(filterEmptyKey(param[key])));
} else {
console.warn('filterEmptyKey:参数不是对象或者数组');
return param;
};
};
请问这种报错出现的原因和解决方法?
目前收到两种原因:
第一种是说ts本身识别不了我自己写的getDatatype方法,导致不能正确的进行类型推断,当我把第一句判断改为ES6的isArray方法之后,确实不报错了。但是存在一个疑问就是第二句判断对象怎么就能通过验证?
第二种是说,当遇到这种情况使用强制类型转换才是正确的解决方法
目前来说对上述两种方法都有一些疑惑,请各位解惑~
类型断言吧 文档里有的
(param as any[]).filter