当函数在typescript中返回错误和值时,如何避免检查值是否未定义?

当函数在typescript中返回错误和值时,如何避免检查值是否未定义?,typescript,Typescript,给定一个函数,在出现错误时返回一个有用值和一个错误值,我试图避免在没有错误时检查有用值是否为undefined const someFunc = (): {error?: Error, value?: string} => { /* ... */ } 调用上述函数后,我们可以检查是否有错误。但是,即使没有错误,我们仍然必须检查是否定义了value const { error, value } = someFunc(); if (error) { /* handle error */

给定一个函数,在出现错误时返回一个有用值和一个错误值,我试图避免在没有错误时检查有用值是否为
undefined

const someFunc = (): {error?: Error, value?: string} => { /* ... */ }
调用上述函数后,我们可以检查是否有错误。但是,即使没有错误,我们仍然必须检查是否定义了
value

const { error, value } = someFunc();

if (error) {
  /* handle error */
  // return something
  // throw something
}

// This is necessary b/c `value` could be undefined. 
// Yet it is "impossible" for value to be undefined if code execution reaches this point
if (!value) {
  throw Error('Expected `value` to be defind');
}

// only now can `value` be used without it being *|undefined
console.log(value.toUpperCase);

是否有更好的类型或错误处理模式,允许以类似的方式处理错误,同时避免检查要定义的
值?

为什么不在函数中抛出错误。第一个而不是返回
error?:error
,第二个是在
value==undefined
的情况下。最后的结果是:
constsumfunc=():string=>{…}
。可以用try-catch包装的函数。

为什么不在函数中抛出错误呢。第一个而不是返回
error?:error
,第二个是在
value==undefined
的情况下。最后的结果是:
constsumfunc=():string=>{…}
。可以用try-catch包装的函数。

有许多有效的场景,方法不应该决定抛出或返回错误。可能需要通过调用方法来做出决定。如果您阅读注释,它会说“return something/throw something”。有许多有效的场景,方法不应该决定抛出或返回错误。可能需要通过调用方法来做出决定。如果你读了评论,它会说“返回某物/抛出某物”。这是一个很好的干净模式,可能会帮助你。这是一个很好的干净模式,可能会帮助你