TypeScript Version:
3.2.1 through 3.8.2
Search Terms:
Cannot read property 'get' of undefined
Code
Run these bash commands to create a failing program:
yarn init -y
yarn add typescript@=3.8.2 @types/angular@=1.6.57 @types/angular-mocks@=1.7.0 @types/react@=16.9.21
echo "import { mock } from 'angular';" > test.tsx
echo "const jsx = <h1>jsx</h1>;" >> test.tsx
npx tsc --jsx preserve --lib es2015,dom test.tsx
test.tsx:
import { mock } from 'angular';
const jsx = <h1>jsx</h1>;
To reproduce this, it's important to have all the listed types installed, even if they are not referenced by code:
@types/angular@types/angular-mocks@types/reactExpected behavior:
Type checking should succeed.
Actual behavior:
tsc crashes with an error message:
Cannot read property 'get' of undefined
Somehow this depends on using JSX and import { mock } from 'angular' in a single file.
It seems to work OK if you import * as angular from 'angular' and then destructure const { mock } = angular;
stack:
TypeError: Cannot read property 'get' of undefined
at resolveExternalModuleSymbol (/Users/cthielen/netflix/spinnaker/tt/node_modules/typescript/lib/tsc.js:30086:71)
at getExportsOfModuleWorker (/Users/cthielen/netflix/spinnaker/tt/node_modules/typescript/lib/tsc.js:30229:28)
at getExportsOfModule (/Users/cthielen/netflix/spinnaker/tt/node_modules/typescript/lib/tsc.js:30199:70)
at getExportsOfSymbol (/Users/cthielen/netflix/spinnaker/tt/node_modules/typescript/lib/tsc.js:30194:39)
at getCandidateListForSymbol (/Users/cthielen/netflix/spinnaker/tt/node_modules/typescript/lib/tsc.js:30554:38)
at /Users/cthielen/netflix/spinnaker/tt/node_modules/typescript/lib/tsc.js:30537:41
at Object.forEachEntry (/Users/cthielen/netflix/spinnaker/tt/node_modules/typescript/lib/tsc.js:9568:26)
at trySymbolTable (/Users/cthielen/netflix/spinnaker/tt/node_modules/typescript/lib/tsc.js:30529:33)
at getAccessibleSymbolChainFromSymbolTable (/Users/cthielen/netflix/spinnaker/tt/node_modules/typescript/lib/tsc.js:30512:30)
at _loop_6 (/Users/cthielen/netflix/spinnaker/tt/node_modules/typescript/lib/tsc.js:30457:34)
checker.ts (from master):
This code explicitly asserts that moduleSymbol.exports should exist, but it is missing.
function resolveExternalModuleSymbol(moduleSymbol: Symbol, dontResolveAlias?: boolean): Symbol;
function resolveExternalModuleSymbol(moduleSymbol: Symbol | undefined, dontResolveAlias?: boolean): Symbol | undefined;
function resolveExternalModuleSymbol(moduleSymbol: Symbol, dontResolveAlias?: boolean): Symbol {
if (moduleSymbol) {
const exportEquals = resolveSymbol(moduleSymbol.exports!.get(InternalSymbolName.ExportEquals), dontResolveAlias);
const exported = getCommonJsExportEquals(getMergedSymbol(exportEquals), getMergedSymbol(moduleSymbol));
return getMergedSymbol(exported) || moduleSymbol;
}
return undefined!;
}
debugger shows missing exports for the symbol:

Playground Link:
Cannot reproduce in playground link due to the need to install @types packages.
Related Issues:
I did not find any dupes.
Putting angular and react in the same project you're lucky this is the worst that happened 😅
Most helpful comment
Putting angular and react in the same project you're lucky this is the worst that happened 😅