diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 7ac4bb7d5a52b..a364e7d63ad5e 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -27022,9 +27022,11 @@ namespace ts { case AssignmentDeclarationKind.ExportsProperty: case AssignmentDeclarationKind.Prototype: case AssignmentDeclarationKind.PrototypeProperty: - let valueDeclaration = binaryExpression.left.symbol?.valueDeclaration; - // falls through case AssignmentDeclarationKind.ModuleExports: + let valueDeclaration: Declaration | undefined; + if (kind !== AssignmentDeclarationKind.ModuleExports) { + valueDeclaration = binaryExpression.left.symbol?.valueDeclaration; + } valueDeclaration ||= binaryExpression.symbol?.valueDeclaration; const annotated = valueDeclaration && getEffectiveTypeAnnotationNode(valueDeclaration); return annotated ? getTypeFromTypeNode(annotated) : undefined; diff --git a/src/services/services.ts b/src/services/services.ts index ecd7eae9530c9..15540e28acf99 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1363,6 +1363,11 @@ namespace ts { onUnRecoverableConfigFileDiagnostic: noop, }; + // The call to isProgramUptoDate below may refer back to documentRegistryBucketKey; + // calculate this early so it's not undefined if downleveled to a var (or, if emitted + // as a const variable without downleveling, doesn't crash). + const documentRegistryBucketKey = documentRegistry.getKeyForCompilationSettings(newSettings); + // If the program is already up-to-date, we can reuse it if (isProgramUptoDate(program, rootFileNames, newSettings, (_path, fileName) => host.getScriptVersion(fileName), fileName => compilerHost!.fileExists(fileName), hasInvalidatedResolution, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences)) { return; @@ -1374,7 +1379,6 @@ namespace ts { // the program points to old source files that have been invalidated because of // incremental parsing. - const documentRegistryBucketKey = documentRegistry.getKeyForCompilationSettings(newSettings); const options: CreateProgramOptions = { rootNames: rootFileNames, options: newSettings,