"Unexpected token ." 使用可选链接“?”时。 运行 mocha 时的语法

"Unexpected token ." when using optional chaning "?." syntax when running mocha

我正在尝试使用 TS 并在尝试 运行 测试我的代码时遇到错误。 我有以下代码:

return this._map.get(y)?.get(x)

当我 运行 浏览器代码时,一切正常。但是,当我 运行 使用 mocha 进行测试时,它会抛出错误:

        return this._map.get(y)?.get(x);        
                                ^

SyntaxError: Unexpected token .

根据我设法阅读的内容,我应该为 NodeJS 环境配置 tsc 不同的东西才能正常工作,但我的印象是它更多地是关于模块解析而不是语法。难道我需要升级到任何特定的 NodeJS 版本?我已经尝试过节点 10 到 13,但 none 有效。 我错过了什么?

可选链接仍然在 Node.js v13 中的标志后面。它不再出现在最新的 Node.js (v14.9.0) 中,尽管它仍然在 v14.4.0 中,所以它在这两者之间的某个地方被取消标记。

要么更新到最新版本,要么在 v13 和 v14 的更早版本中启用它:

node --harmony-optional-chaining ...

我能够通过更改 tsconfig.json:

在 Node 12 中使用 TypeScript 解决这个问题
"compilerOptions": {
  "lib": ["ES2019"],
  "module": "es2015",
  "target": "ES2019",
  ...
}

当我的 target"esnext" 时,我收到了这个错误。在我更改为 "ES2019" 后,它在 Node 12 中工作得很好。希望对您有所帮助。

ES2020 中添加了可选链接,Node 尚不支持。因此,如果您的 target 编译选项是 ES2020ESNext,则 TypeScript 编译器将看到一个可选的链接运算符别管它。

如果您的目标是 ES2019 或更早的版本,则 typescript 会将功能转换为 Node 可以理解的内容。类似于:

const attributeScores = (_a = apiResponse === null || apiResponse === void 0 ? void 0 ...

来源:Syntax Error with Optional Chaining in Typescript 3.7