Search code examples
javascriptjshintecmascript-harmonyesprima

ES6 Module export default syntax


I'm using the es6-module-transpiler, esprima and JSHint with esnext: true options. JSHint complains when I put:

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

But esprima complains when I use

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

The spec says

export default AssignmentExpression ;

Which makes me think that JSHint needs updating and esprima is properly bombing out because there isn't an assignment. Can someone be the deciderer for me here?


Solution

  • Actually an AssignmentExpression can be any expression, it's the expression at the top most level, the one that contains all other expressions (see the spec).

    However,

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

    really isn't an assignment expression it's a syntax error. If you use the assignment operator in an assignment expression, then you need a left hand side and a right hand side. So something like this would be valid:

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

    Just using an object literal should be correct, because, as I said, an AssignmentExpression can be any expression.

    So Esprima seems to be wrong.