解构不同的条件 Return 类型

Destructuring Different Conditional Return Types

我有一个函数可以 return 一个字符串,如果有错误,或者两个对象,如果没有错误。我的函数如下所示:

function logResults(json) {
  const one = json[0]
  const two = json[1]
  const error = json[0].error

  if (error) {
    return 'error at logResults' // string type
  }

  return (one, two) // object type
}

我的问题是是否可以解构此函数的 return 类型?如果两个对象成功 returned:let [ one, two ] = logResults(json),此行有效,但如果字符串 returned,则此行无效。如果无法进行解构,那么处理不同 return 类型的最有效方法是什么?

return either a string, if there is an error, or two objects, when there is no error

呃,别这样。正是出于您所证明的原因:该功能变得不可用。只需抛出一个错误或 return 一个包含两个对象的数组。

function logResults(json) {
  const [one, two] = json;
  if (one.error) {
    throw new Error('error at logResults');
  }

  return [one, two]; // or just `json`?
}

现在你可以像想象的那样在调用后使用解构了。