问题 ES6模块导出默认语法


我正在使用es6-module-transpiler,esprima和JSHint esnext: true 选项。当我提出时,JSHint抱怨:

export default = { some: 'thing', other: 'thing' };

但是esprima在我使用时抱怨

export default { some: 'thing', other: 'thing' };

规范 说

export default AssignmentExpression ;

这让我觉得JSHint需要更新和esprima是正确的轰炸,因为没有任务。有人可以在这里成为我的决定者吗?


7111
2018-01-25 00:03


起源



答案:


实际上是一个 AssignmentExpression 可以是任何表达式,它是最高级别的表达式,包含所有其他表达式的表达式(请参阅 规范)。

然而,

export default = { some: 'thing', other: 'thing' };

真的不是赋值表达式,这是一个语法错误。如果在赋值表达式中使用赋值运算符,则需要左侧和右侧。所以像这样的东西是有效的:

export default foo = { some: 'thing', other: 'thing' };

只使用一个对象文字应该是正确的,因为,正如我所说,一个 AssignmentExpression 可 任何 表达。

所以Esprima似乎是错的。


13
2018-01-25 02:17



谢谢你的决定。我有 提出了一个问题 如果您对以下内容感兴趣,可以参加esprima项目。 - Jacob


答案:


实际上是一个 AssignmentExpression 可以是任何表达式,它是最高级别的表达式,包含所有其他表达式的表达式(请参阅 规范)。

然而,

export default = { some: 'thing', other: 'thing' };

真的不是赋值表达式,这是一个语法错误。如果在赋值表达式中使用赋值运算符,则需要左侧和右侧。所以像这样的东西是有效的:

export default foo = { some: 'thing', other: 'thing' };

只使用一个对象文字应该是正确的,因为,正如我所说,一个 AssignmentExpression 可 任何 表达。

所以Esprima似乎是错的。


13
2018-01-25 02:17



谢谢你的决定。我有 提出了一个问题 如果您对以下内容感兴趣,可以参加esprima项目。 - Jacob