打字稿数组或对象

时间:2020-06-08 23:33:27

标签: typescript typescript-typings

我有这个签名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]);
          }
        });
    }
  }

1 个答案:

答案 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]))
   }
}