【问题标题】:False positive "Unreachable code detected.ts(7027)"?误报“检测到无法访问的代码.ts(7027)”?
【发布时间】:2020-07-18 08:51:39
【问题描述】:

跟随 sn-p 在console.log() 上返回Unreachable code detected.ts(7027)。在Visual Studio Code v1.43.2 上运行。

const foo = (() => {
  try {
    // operation like "return fs.readFileSync("./credentials.json")" is more likely to fail (nodejs)
    // following line is just placeholder
    return { val: 4 };
  } catch (err) {
    return { val: -1 };
  }
})();

console.log(foo.val); //vs throws unreachable

TypeScript Playground example

真的是误报吗?

【问题讨论】:

  • 这怎么会抛出错误?
  • 另外,“我想在声明时计算 foo 的值,而不是稍后”,情况总是如此。如果你有异步代码,那么值仍然会在声明时计算,它只是一个 Promise。
  • 我想永远不会。但是返回值只是一个占位符。你可以用一些操作来替换它。
  • 那么,该操作会引发错误吗?如果没有,那么catch 将无法访问。
  • vscode 在console.log() 上给出Unreachable code detected.ts(7027) 警告,而不是catch

标签: javascript typescript visual-studio-code


【解决方案1】:

如果您真的想以这种方式实现它,则需要在遇到问题时为val 提供某种回退。

这样实现:

const foo = (() => {
  let val = undefined
  try {
    val = 4
  } catch (err) {
    throw new Error(err);
  }
  return { val }
})();

console.log(foo.val);

这可能只是 TypeScript 的问题,但这将解决问题。 TS 在抱怨。

【讨论】:

  • 如果你进入catch块,它已经没有返回任何东西,因为它只是抛出一个错误,从而中断了正常的操作流程。
  • 这就是return 行位于try/catch 块之外的原因。
  • 但这仍然没关系 - 在 throw 上,您仍然没有得到 return 声明。
  • 对,好点。我的错......我仍然认为它会修复 TS 错误。
猜你喜欢
  • 2019-11-22
  • 2011-05-09
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多