From 767c7b43a46a3921eb08e2c327722b305190d9c3 Mon Sep 17 00:00:00 2001 From: magic-akari Date: Mon, 27 Jun 2022 14:39:21 +0800 Subject: [PATCH] fix: preserve function params type if possible (#14694) * fix: preserve function params type if possible * chore: add test for default value --- .../src/params.ts | 1 + .../parameters/preserve-types/input.ts | 13 +++++++++++++ .../parameters/preserve-types/output.js | 18 ++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 packages/babel-plugin-transform-parameters/test/fixtures/parameters/preserve-types/input.ts create mode 100644 packages/babel-plugin-transform-parameters/test/fixtures/parameters/preserve-types/output.js 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; +}