diff --git a/src/babel/transformation/transformers/es6/parameters/rest.js b/src/babel/transformation/transformers/es6/parameters/rest.js index c467283772..82c40e0d25 100644 --- a/src/babel/transformation/transformers/es6/parameters/rest.js +++ b/src/babel/transformation/transformers/es6/parameters/rest.js @@ -9,6 +9,11 @@ var memberExpressionOptimisationVisitor = { } }, + Flow() { + // don't touch reference in type annotations + this.skip(); + }, + Function(node, parent, scope, state) { // skip over functions as whatever `arguments` we reference inside will refer // to the wrong function diff --git a/test/core/fixtures/transformation/es6.parameters/rest-flow-parameter-reference/actual.js b/test/core/fixtures/transformation/es6.parameters/rest-flow-parameter-reference/actual.js new file mode 100644 index 0000000000..22d0e1caef --- /dev/null +++ b/test/core/fixtures/transformation/es6.parameters/rest-flow-parameter-reference/actual.js @@ -0,0 +1,9 @@ +function foo( + x: Object, + ...types +): { types: Array, x: Object } { + return { + types: types, + x: x, + }; +} diff --git a/test/core/fixtures/transformation/es6.parameters/rest-flow-parameter-reference/expected.js b/test/core/fixtures/transformation/es6.parameters/rest-flow-parameter-reference/expected.js new file mode 100644 index 0000000000..d5babadbd7 --- /dev/null +++ b/test/core/fixtures/transformation/es6.parameters/rest-flow-parameter-reference/expected.js @@ -0,0 +1,12 @@ +"use strict"; + +function foo(x) { + for (var _len = arguments.length, types = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + types[_key - 1] = arguments[_key]; + } + + return { + types: types, + x: x + }; +}