diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 076830b47f851..811dbdcbc3d25 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2063,6 +2063,10 @@ namespace ts { if (initializer) { namespace = getSymbolOfNode(initializer); } + // Currently, IIFEs may not have a symbol and we don't know about their contents. Give up in this case. + if (!namespace) { + return undefined; + } if (namespace.valueDeclaration && isVariableDeclaration(namespace.valueDeclaration) && namespace.valueDeclaration.initializer && diff --git a/tests/baselines/reference/typeLookupInIIFE.symbols b/tests/baselines/reference/typeLookupInIIFE.symbols new file mode 100644 index 0000000000000..1324328027428 --- /dev/null +++ b/tests/baselines/reference/typeLookupInIIFE.symbols @@ -0,0 +1,9 @@ +=== tests/cases/conformance/salsa/a.js === +// #22973 +var ns = (function() {})(); +>ns : Symbol(ns, Decl(a.js, 1, 3)) + +/** @type {ns.NotFound} */ +var crash; +>crash : Symbol(crash, Decl(a.js, 3, 3)) + diff --git a/tests/baselines/reference/typeLookupInIIFE.types b/tests/baselines/reference/typeLookupInIIFE.types new file mode 100644 index 0000000000000..83289c4b21413 --- /dev/null +++ b/tests/baselines/reference/typeLookupInIIFE.types @@ -0,0 +1,12 @@ +=== tests/cases/conformance/salsa/a.js === +// #22973 +var ns = (function() {})(); +>ns : void +>(function() {})() : void +>(function() {}) : () => void +>function() {} : () => void + +/** @type {ns.NotFound} */ +var crash; +>crash : any + diff --git a/tests/cases/conformance/salsa/typeLookupInIIFE.ts b/tests/cases/conformance/salsa/typeLookupInIIFE.ts new file mode 100644 index 0000000000000..52b76db639252 --- /dev/null +++ b/tests/cases/conformance/salsa/typeLookupInIIFE.ts @@ -0,0 +1,9 @@ +// @noEmit: true +// @allowJs: true +// @checkJs: true +// @noImplicitAny: true +// @Filename: a.js +// #22973 +var ns = (function() {})(); +/** @type {ns.NotFound} */ +var crash;