diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 981380c70de8e..7f11495508bdf 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -17164,7 +17164,7 @@ namespace ts { if (targetDeclarationKind !== SyntaxKind.Unknown) { const decl = getDeclarationOfKind(resolvedRequire, targetDeclarationKind); // function/variable declaration should be ambient - return !!(decl.flags & NodeFlags.Ambient); + return !!decl && !!(decl.flags & NodeFlags.Ambient); } return false; } diff --git a/tests/baselines/reference/noCrashOnParameterNamedRequire.js b/tests/baselines/reference/noCrashOnParameterNamedRequire.js new file mode 100644 index 0000000000000..beb7429a47c95 --- /dev/null +++ b/tests/baselines/reference/noCrashOnParameterNamedRequire.js @@ -0,0 +1,11 @@ +//// [index.js] +(function(require, module, exports){ + const mod = require("./mod"); + mod.foo; +})(null, null, null); + +//// [index.js] +(function (require, module, exports) { + var mod = require("./mod"); + mod.foo; +})(null, null, null); diff --git a/tests/baselines/reference/noCrashOnParameterNamedRequire.symbols b/tests/baselines/reference/noCrashOnParameterNamedRequire.symbols new file mode 100644 index 0000000000000..824a61db10fed --- /dev/null +++ b/tests/baselines/reference/noCrashOnParameterNamedRequire.symbols @@ -0,0 +1,14 @@ +=== tests/cases/compiler/index.js === +(function(require, module, exports){ +>require : Symbol(require, Decl(index.js, 0, 10)) +>module : Symbol(module, Decl(index.js, 0, 18)) +>exports : Symbol(exports, Decl(index.js, 0, 26)) + + const mod = require("./mod"); +>mod : Symbol(mod, Decl(index.js, 1, 9)) +>require : Symbol(require, Decl(index.js, 0, 10)) + + mod.foo; +>mod : Symbol(mod, Decl(index.js, 1, 9)) + +})(null, null, null); diff --git a/tests/baselines/reference/noCrashOnParameterNamedRequire.types b/tests/baselines/reference/noCrashOnParameterNamedRequire.types new file mode 100644 index 0000000000000..2fe629f9d5190 --- /dev/null +++ b/tests/baselines/reference/noCrashOnParameterNamedRequire.types @@ -0,0 +1,25 @@ +=== tests/cases/compiler/index.js === +(function(require, module, exports){ +>(function(require, module, exports){ const mod = require("./mod"); mod.foo;})(null, null, null) : void +>(function(require, module, exports){ const mod = require("./mod"); mod.foo;}) : (require: any, module: any, exports: any) => void +>function(require, module, exports){ const mod = require("./mod"); mod.foo;} : (require: any, module: any, exports: any) => void +>require : any +>module : any +>exports : any + + const mod = require("./mod"); +>mod : any +>require("./mod") : any +>require : any +>"./mod" : "./mod" + + mod.foo; +>mod.foo : any +>mod : any +>foo : any + +})(null, null, null); +>null : null +>null : null +>null : null + diff --git a/tests/cases/compiler/noCrashOnParameterNamedRequire.ts b/tests/cases/compiler/noCrashOnParameterNamedRequire.ts new file mode 100644 index 0000000000000..bb4b9d53460f6 --- /dev/null +++ b/tests/cases/compiler/noCrashOnParameterNamedRequire.ts @@ -0,0 +1,8 @@ +// @allowJs: true +// @checkJs: true +// @outDir: ./built +// @filename: index.js +(function(require, module, exports){ + const mod = require("./mod"); + mod.foo; +})(null, null, null); \ No newline at end of file