diff --git a/packages/babel-plugin-proposal-object-rest-spread/src/index.js b/packages/babel-plugin-proposal-object-rest-spread/src/index.js index 784a4b67cbdc..124a53c1e3ec 100644 --- a/packages/babel-plugin-proposal-object-rest-spread/src/index.js +++ b/packages/babel-plugin-proposal-object-rest-spread/src/index.js @@ -346,7 +346,11 @@ export default declare((api, opts) => { ); refPropertyPath.forEach(prop => { const { node } = prop; - ref = t.memberExpression(ref, t.cloneNode(node.key), node.computed); + ref = t.memberExpression( + ref, + t.cloneNode(node.key), + node.computed || t.isLiteral(node.key), + ); }); const objectPatternPath = path.findParent(path => diff --git a/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/nested-literal-property/input.js b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/nested-literal-property/input.js new file mode 100644 index 000000000000..dbfc8a130d78 --- /dev/null +++ b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/nested-literal-property/input.js @@ -0,0 +1,7 @@ +let useState = [{ some: 42 }, () => null]; + +let { + 0: { numeric,...rest1 }, + '2': { str,...rest2 }, + 1: setState, +} = useState; diff --git a/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/nested-literal-property/output.js b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/nested-literal-property/output.js new file mode 100644 index 000000000000..dbdd42dbeb44 --- /dev/null +++ b/packages/babel-plugin-proposal-object-rest-spread/test/fixtures/object-rest/nested-literal-property/output.js @@ -0,0 +1,14 @@ +let useState = [{ + some: 42 +}, () => null]; +let { + 0: { + numeric + }, + '2': { + str + }, + 1: setState +} = useState, + rest1 = babelHelpers.objectWithoutProperties(useState[0], ["numeric"]), + rest2 = babelHelpers.objectWithoutProperties(useState['2'], ["str"]);