ESLint 报错说不支持可选链操作符,是不是解析器没配对?

综敏 阅读 41

我在项目里用了可选链(?.)语法,但 ESLint 一直报错说 Unexpected token,明明我的 Node 和浏览器都支持啊。是不是 ESLint 的 parser 没设对?

我试过加 parserOptions 里的 ecmaVersion: 2020,但还是不行。下面是我代码里的一行:

const name = user?.profile?.name;
我来解答 赞 18 收藏
二维码
手机扫码查看
2 条解答
长孙雯清
你这问题我之前也遇到过,说白了就两个可能:

第一个,ESLint 版本太老。可选链这特性是 ESLint 6.x 才开始完整支持的,你可以看一下项目的 package.json 确认一下版本。如果是 5.x,升级一下就行:

npm install eslint@latest --save-dev

第二个,如果是 Vue 项目,那大概率是 vue-eslint-parser 的问题。这货有时候会无视你外层的 ecmaVersion 设置,得在 parserOptions 里单独声明:

{
"parserOptions": {
"ecmaVersion": 2020,
"sourceType": "module"
},
"parser": "vue-eslint-parser"
}

或者在 rules 里加一条:

"no-unexpected-multiline": "off"

不过更常见的做法是直接升级 vue-eslint-parser 到最新版本。

还有一个偏方,有些人会用 babel-eslint 或者 @babel/eslint-parser 做 parser,这俩对新版语法支持更好,但现在已经不推荐了,能用原生就用原生。

你先跑一下 eslint --version 看看版本号,基本就是版本问题。
点赞
2026-03-11 08:22
Dev · 卫华
你这个问题我之前也碰到过,确实挺烦的。

先说最可能的原因:你的 ESLint 版本太旧了。可选链是 ES2020 的特性,但很多老项目用的 ESLint 还是 6.x 版本,根本不支持。

你检查一下 ESLint 版本:

npm eslint --version


如果是 6.x,先升级到最新版:

npm install eslint@latest --save-dev


如果升级后还是不行,那就在你的 .eslintrc.js 里把配置写完整:

module.exports = {
parserOptions: {
ecmaVersion: 2020,
sourceType: 'module',
},
env: {
es2020: true,
node: true,
},
};


还有一个坑:如果你的项目用了 Babel 转译(比如 create-react-app 或者 vue-cli 创建的项目),可能需要换成 babel-eslint 或者 @babel/eslint-parser 作为解析器:

npm install @babel/eslint-parser --save-dev


然后在 .eslintrc.js 里加上:

module.exports = {
parser: '@babel/eslint-parser',
parserOptions: {
requireConfigFile: false,
babelOptions: {
presets: ['@babel/preset-env'],
},
ecmaVersion: 2020,
sourceType: 'module',
},
};


你先试试升级 ESLint + 完整配置,基本就能解决了。
点赞 2
2026-03-10 18:10