如果不是返回值引发错误,TypeScript就会给出错误

时间:2018-11-21 17:39:57

标签: javascript function typescript typescript-typings

我有这个功能:

public getObject(obj:IObjectsCommonJSON): ObjectsCommon {
    const id = obj.id;
    this.objectCollector.forEach( object => {
      if(object.getID() === id){
        return object;
      }
    });

    throw new Error(`Scene.getObject(). Object ${id} not found`); 
  }

我得到以下ts错误:

  

并非所有代码路径都返回值。

是真的,因为object.id不能位于objectCollector Array中,在这种情况下,我会抛出错误。我该如何进行这项工作?我已经尝试过了

  

公共getObject(obj:IObjectsCommonJSON):ObjectsCommon |无效

但它也不起作用

2 个答案:

答案 0 :(得分:1)

我将使用find()并添加检查是否抛出错误。

public getObject(obj:IObjectsCommonJSON): ObjectsCommon {
  const id = obj.id;
  const item = this.objectCollector.find(object => object.getID() === id);
  if (!item) {
    throw new Error(`Scene.getObject(). Object ${id} not found`);
  }
  return item;
}

答案 1 :(得分:1)

错误位于forEach()的回调中,而不是getObject()调用中。请注意,即使您使用的是箭头功能,它仍然是一个功能。回调中的return从箭头函数返回,而不是从getObject()返回。请注意,对于arrow functionsx => {return y}等效于x => y。无法从外部函数从箭头函数内部返回。

这是您的功能:

object => {
  if(object.getID() === id){
    return object;
  }
}

编译器(如果启用了--noImplicitReturns)会注意到该函数有时仅返回一个值,因此会抱怨。

当然,forEach()不在乎其回调的返回值,无论如何,这都不是您的意图。解决方法是执行其他人建议的操作...使用find()而不是forEach()... this.objectCollector.find(o => o.getID()===id) ...或使用for循环:

for (let object of this.objectCollector) {
  if (object.getID() === id) {
    return object; // no callback, this returns from the getObject function.
  }
}

希望有所帮助;祝你好运!