From ec4863cc0eb885de9849b047b2268b36ae6dd84e Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Tue, 9 Mar 2021 11:43:19 -0800 Subject: [PATCH] Fix37991 (#43166) * Add failing test * Fix tslib check errors for commonjs imports --- src/compiler/checker.ts | 4 ++-- tests/baselines/reference/tslibInJs.errors.txt | 8 ++++++++ tests/baselines/reference/tslibInJs.symbols | 6 ++++++ tests/baselines/reference/tslibInJs.types | 10 ++++++++++ tests/cases/compiler/tslibInJs.ts | 13 +++++++++++++ 5 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 tests/baselines/reference/tslibInJs.errors.txt create mode 100644 tests/baselines/reference/tslibInJs.symbols create mode 100644 tests/baselines/reference/tslibInJs.types create mode 100644 tests/cases/compiler/tslibInJs.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index cb0d453a59..447cba610b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -34678,8 +34678,8 @@ namespace ts { } } - if (node.kind === SyntaxKind.BindingElement) { - if (node.parent.kind === SyntaxKind.ObjectBindingPattern && languageVersion < ScriptTarget.ESNext) { + if (isBindingElement(node)) { + if (isObjectBindingPattern(node.parent) && node.dotDotDotToken && languageVersion < ScriptTarget.ES2018) { checkExternalEmitHelpers(node, ExternalEmitHelpers.Rest); } // check computed properties inside property names of binding elements diff --git a/tests/baselines/reference/tslibInJs.errors.txt b/tests/baselines/reference/tslibInJs.errors.txt new file mode 100644 index 0000000000..8b1d596b6c --- /dev/null +++ b/tests/baselines/reference/tslibInJs.errors.txt @@ -0,0 +1,8 @@ +tests/cases/compiler/main.js(2,25): error TS2307: Cannot find module 'bar' or its corresponding type declarations. + + +==== tests/cases/compiler/main.js (1 errors) ==== + "use strict"; + const { foo } = require("bar"); + ~~~~~ +!!! error TS2307: Cannot find module 'bar' or its corresponding type declarations. \ No newline at end of file diff --git a/tests/baselines/reference/tslibInJs.symbols b/tests/baselines/reference/tslibInJs.symbols new file mode 100644 index 0000000000..0ddae09e23 --- /dev/null +++ b/tests/baselines/reference/tslibInJs.symbols @@ -0,0 +1,6 @@ +=== tests/cases/compiler/main.js === +"use strict"; +const { foo } = require("bar"); +>foo : Symbol(foo, Decl(main.js, 1, 7)) +>require : Symbol(require) + diff --git a/tests/baselines/reference/tslibInJs.types b/tests/baselines/reference/tslibInJs.types new file mode 100644 index 0000000000..7c7354cd41 --- /dev/null +++ b/tests/baselines/reference/tslibInJs.types @@ -0,0 +1,10 @@ +=== tests/cases/compiler/main.js === +"use strict"; +>"use strict" : "use strict" + +const { foo } = require("bar"); +>foo : any +>require("bar") : any +>require : any +>"bar" : "bar" + diff --git a/tests/cases/compiler/tslibInJs.ts b/tests/cases/compiler/tslibInJs.ts new file mode 100644 index 0000000000..b91de37a89 --- /dev/null +++ b/tests/cases/compiler/tslibInJs.ts @@ -0,0 +1,13 @@ +// @checkJs: true +// @allowJs: true +// @moduleResolution: node +// @target: es2018 +// @module: commonjs +// @importHelpers: true +// @lib: es2018 +// @outDir: out +// @noEmit: true + +// @fileName: main.js +"use strict"; +const { foo } = require("bar"); \ No newline at end of file