VSCode 中支持可选链操作符

49

React Native 0.56提供了对可选链操作符(即?.)的本地支持。

然而,最新的稳定版VS Code无法识别此语法并抛出TypeScript验证错误:

[ts] Expression expected.

没有编译时或eslint错误被抛出。

我该怎么做来修复它呢?


2019/12/11更新:

自3.7版本起,TypeScript正式支持可选链!

如果您仍然遇到此错误,则可能是您的VSCode附带的TypeScript库版本< 3.7。

您可以通过在工作区中安装最新版本的typescript(>= 3.7)(作为dev deps使用npm或yarn)来简单解决它。

然后打开命令面板,键入tstv,并将用于JS和TS功能的TypeScript版本VS Code的版本切换到工作区的版本(确保它>= 3.7),就行了!

这绝对是一个很棒的功能,感谢大家,祝愉快编程!


2
这个答案和这篇教程帮助我解决了这个问题。我认为关键在于禁用js/ts验证,因为错误来自于 '[ts]'。 - Sait Banazili
在SO上提出问题后,不选择任何有效答案被认为是不好的行为。请挑选最有用的答案并将其标记为解决方案。 - Isochronous
5个回答

45

VS Code 1.41支持JavaScript和TypeScript文件的可选链。此支持包括语法突出显示和智能提示。

如果您使用的是VS Code 1.41+,而可选链没有按预期工作,请尝试:

  • 检查已安装的扩展程序。其中一些可能尚未理解可选链接,这可能会导致错误或不良的语法突出显示。

  • 如果您正在使用工作区TypeScript版本,请确保它为TypeScript 3.7+。


2
不需要使用 nightly 构建,您也可以强制 VS Code 使用 node_modules 中的版本。请参阅 https://code.visualstudio.com/docs/typescript/typescript-compiling#_using-newer-typescript-versions。 - Ries Vriend
在我的情况下,我已经使用了TypeScript,但是当悬停在?.prop上时没有任何信息,并且在尝试使用可选链输入值时,调试控制台会抛出错误。一些研究表明这是一个Node 14.5+功能,因此我切换到使用该版本的Node,现在悬停工作正常,调试控制台现在允许我在表达式中使用?. - ps2goat

15

1
谢谢!迄今为止,这是救星建议。关闭 TS 验证是一个无聊的选项,因为您将失去 VSCode 的所有好处。 - Eugene Tiutiunnyk
这个运行得非常好!!!非常感谢你。 - Nishant Desai

2

我刚刚解决了在vscode json设置中禁用js/ts验证的问题:

"javascript.validate.enable": false

您可能需要安装eslint-plugin-babel以获取ESLint规则。

{
  "plugins": [
    "babel"
  ],
  "rules": {
    "babel/new-cap": 1,
    "babel/camelcase": 1,
    "babel/no-invalid-this": 1,
    "babel/object-curly-spacing": 1,
    "babel/quotes": 1,
    "babel/semi": 1,
    "babel/no-unused-expressions": 1,
    "babel/valid-typeof": 1
  }
}

你有这个项目的 Github 仓库链接吗?很高兴能看到一些真正可用的样板代码。 - Alex Cory
这里只是留给其他人的参考。https://github.com/malienist/default-config-files/blob/master/.eslintrc.json - Safal Pillai

1

我的情况是,我需要将"tslint-config-prettier"添加到tslint.json文件中。

这是我的tslint.json文件。

{
  "defaultSeverity": "error",
  "extends": [
    "tslint:recommended",
    "tslint-config-prettier"  # ----> This line
  ],
  "jsRules": {},
  "rules": {
    "semicolon": false,
    "quotemark": [true, "single"],
    "prefer-for-of": false,
    "object-literal-sort-keys": false,
    "ordered-imports": false,
    "interface-name": false,
    "callable-types": false,
    "no-console": false,
    "no-bitwise": false,
    "variable-name": [
      true,
      "allow-leading-underscore",
      "allow-snake-case"
    ]
  },
  "rulesDirectory": []
}

1
直到我卸载了JavaScript和TypeScript智能感知扩展程序之前,这种情况仍在发生。
因此,如果您仍然遇到此问题,请检查卸载旧插件。您还可以尝试vscode insiders版本,并检查是否在其中起作用。对我来说,它可以在不做任何更改的情况下工作。

我很高兴能够帮到您!谢谢您告诉我! - DarkCrazy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接