我有这个签名static cleanSOAP(envelope: [] | {}, removePassword: boolean = false)
,经过构造函数验证后,如果它是数组,我在信封上进行了forEach,但是我得到了一个错误:类型'{ } | []”。属性“ forEach”在类型“ {}”上不存在。ts(2339)
如何防止这种情况?
代码:
static cleanSOAP(envelope: [] | {}, removePassword: boolean = false) {
const unwantedProperties = ['$attributes'];
if (removePassword === true) unwantedProperties.push('password');
if (envelope && envelope.constructor === Array) {
envelope.forEach(item: => {
Helpers.cleanSOAP(item);
});
}
else if (typeof envelope === 'object') {
Object.getOwnPropertyNames(envelope)
.forEach(key => {
if (unwantedProperties.indexOf(key) !== -1) {
delete envelope[key];
}
else if (envelope[key] === null) {
delete envelope[key];
}
else if (envelope.hasOwnProperty(key) && typeof envelope[key] === 'object' && envelope[key] !== null && envelope[key].hasOwnProperty('$value')) {
envelope[key] = envelope[key]['$value'];
}
else {
Helpers.cleanSOAP(envelope[key]);
}
});
}
}
答案 0 :(得分:1)
在打字稿中的对象上不存在forEach
函数,因为您不能直接迭代对象。您需要确定参数是数组还是对象,然后进行相应的迭代。例如:
function cleanSOAP(envelope: [] | {}, removePassword: boolean = false){
if(Array.isArray(envelope)){
envelope.forEach(it => doSomething(it))
} else {
Object.keys(envelope).forEach(key => doSomething(evelope[key]))
}
}