我有这个功能:
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 |无效
但它也不起作用
答案 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 functions,x => {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.
}
}
希望有所帮助;祝你好运!