diff --git a/packages/babel-plugin-transform-parameters/src/params.ts b/packages/babel-plugin-transform-parameters/src/params.ts index 9b21a95952ad..2ed848779811 100644 --- a/packages/babel-plugin-transform-parameters/src/params.ts +++ b/packages/babel-plugin-transform-parameters/src/params.ts @@ -187,6 +187,7 @@ export default function convertFunctionParams( body.push(defNode); } else if (param.isObjectPattern() || param.isArrayPattern()) { const uid = path.scope.generateUidIdentifier("ref"); + uid.typeAnnotation = param.node.typeAnnotation; const defNode = t.variableDeclaration("let", [ t.variableDeclarator(param.node, uid), diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/preserve-types/input.ts b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/preserve-types/input.ts new file mode 100644 index 000000000000..b9da79cb2a66 --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/preserve-types/input.ts @@ -0,0 +1,13 @@ +type Point = { + x: number; + y: number; +}; + +function value({ x, y }: Point) { + return x * y; +} + +function valueWithDefault({ x, y }: Point = {}) { + return x * y; +} + diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/preserve-types/output.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/preserve-types/output.js new file mode 100644 index 000000000000..f8dcb46486ee --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/preserve-types/output.js @@ -0,0 +1,18 @@ +type Point = { + x: number; + y: number; +}; + +function value(_ref: Point) { + var x = _ref.x, + y = _ref.y; + return x * y; +} + +function valueWithDefault() { + var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + x = _ref2.x, + y = _ref2.y; + + return x * y; +}