When returning an object from an arrow function, it seems that it is necessary to use an extra set of {} and a return statement because of an ambiguity in the grammar:
p => { return { foo: 'bar' } }
If the arrow function returns anything else, the {} and return are unnecessary, e.g.:
p => 'foo'
Is there something obvious I am missing?
You may wonder, why the syntax is valid (but not working as expected):
It's because of JavaScript's label syntax:
So if you transpile the above code to ES5, it should look like:
If the body of the arrow function is wrapped in curly braces, it is not implicitly returned. Wrap the object in parentheses. It would look something like this.
By wrapping the body in parens, the function will return
{ foo: 'bar }
.Hopefully, that solves your problem. If not, I recently wrote an article about Arrow functions which covers it in more detail. I hope you find it useful. Javascript Arrow Functions
You must wrap the returning object literal into parentheses. Otherwise curly braces will be considered to denote the function’s body. The following works:
You don't need to wrap any other expression into parentheses:
and so on.
Reference: MDN - Returning object literals