diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 85be34b8d29..8f420077f27 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3870,11 +3870,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } const hasDefaultOnly = isOnlyImportableAsDefault(specifier, moduleSymbol); let hasSyntheticDefault = canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias, specifier); - // For export specifiers re-exporting 'default', when allowSyntheticDefaultImports is enabled, - // allow synthetic default even from TypeScript source files (not just declaration files). - // This is consistent with the intent of allowSyntheticDefaultImports to allow treating modules - // without a default export as if they had one. - if (!hasSyntheticDefault && isExportSpecifier(node) && allowSyntheticDefaultImports) { + // For export specifiers re-exporting 'default' from declaration files, when allowSyntheticDefaultImports + // is enabled, allow synthetic default. Declaration files may correspond to CommonJS modules at runtime, + // where a default import is allowed to reference the whole module.exports symbol. + if (!hasSyntheticDefault && isExportSpecifier(node) && allowSyntheticDefaultImports && (!file || file.isDeclarationFile)) { hasSyntheticDefault = true; } if (!exportDefaultSymbol && !hasSyntheticDefault && !hasDefaultOnly) { diff --git a/tests/baselines/reference/reexportMissingDefault.errors.txt b/tests/baselines/reference/reexportMissingDefault.errors.txt new file mode 100644 index 00000000000..91637fa1f74 --- /dev/null +++ b/tests/baselines/reference/reexportMissingDefault.errors.txt @@ -0,0 +1,11 @@ +a.ts(2,10): error TS2305: Module '"./b"' has no exported member 'default'. + + +==== b.ts (0 errors) ==== + export const b = null; + +==== a.ts (1 errors) ==== + export { b } from "./b"; + export { default } from "./b"; + ~~~~~~~ +!!! error TS2305: Module '"./b"' has no exported member 'default'. \ No newline at end of file diff --git a/tests/baselines/reference/reexportMissingDefault.types b/tests/baselines/reference/reexportMissingDefault.types index 3ef3ab2eeef..afba6a1c2f7 100644 --- a/tests/baselines/reference/reexportMissingDefault.types +++ b/tests/baselines/reference/reexportMissingDefault.types @@ -3,6 +3,7 @@ === b.ts === export const b = null; >b : any +> : ^^^ === a.ts === export { b } from "./b"; @@ -10,6 +11,6 @@ export { b } from "./b"; > : ^^^ export { default } from "./b"; ->default : typeof import("b") -> : ^^^^^^^^^^^^^^^^^^ +>default : any +> : ^^^ diff --git a/tests/baselines/reference/reexportMissingDefault1.errors.txt b/tests/baselines/reference/reexportMissingDefault1.errors.txt new file mode 100644 index 00000000000..dfee891aa42 --- /dev/null +++ b/tests/baselines/reference/reexportMissingDefault1.errors.txt @@ -0,0 +1,12 @@ +a.ts(2,10): error TS2305: Module '"./b"' has no exported member 'default'. + + +==== b.ts (0 errors) ==== + export const b = null; + +==== a.ts (1 errors) ==== + export { b } from "./b"; + export { default } from "./b"; + ~~~~~~~ +!!! error TS2305: Module '"./b"' has no exported member 'default'. + \ No newline at end of file diff --git a/tests/baselines/reference/reexportMissingDefault1.types b/tests/baselines/reference/reexportMissingDefault1.types index 7527bc6cad3..3b058c8337b 100644 --- a/tests/baselines/reference/reexportMissingDefault1.types +++ b/tests/baselines/reference/reexportMissingDefault1.types @@ -3,6 +3,7 @@ === b.ts === export const b = null; >b : any +> : ^^^ === a.ts === export { b } from "./b"; @@ -10,6 +11,6 @@ export { b } from "./b"; > : ^^^ export { default } from "./b"; ->default : typeof import("b") -> : ^^^^^^^^^^^^^^^^^^ +>default : any +> : ^^^ diff --git a/tests/baselines/reference/reexportMissingDefault2.errors.txt b/tests/baselines/reference/reexportMissingDefault2.errors.txt new file mode 100644 index 00000000000..91637fa1f74 --- /dev/null +++ b/tests/baselines/reference/reexportMissingDefault2.errors.txt @@ -0,0 +1,11 @@ +a.ts(2,10): error TS2305: Module '"./b"' has no exported member 'default'. + + +==== b.ts (0 errors) ==== + export const b = null; + +==== a.ts (1 errors) ==== + export { b } from "./b"; + export { default } from "./b"; + ~~~~~~~ +!!! error TS2305: Module '"./b"' has no exported member 'default'. \ No newline at end of file diff --git a/tests/baselines/reference/reexportMissingDefault2.types b/tests/baselines/reference/reexportMissingDefault2.types index f003a83ba96..56de966eefd 100644 --- a/tests/baselines/reference/reexportMissingDefault2.types +++ b/tests/baselines/reference/reexportMissingDefault2.types @@ -3,6 +3,7 @@ === b.ts === export const b = null; >b : any +> : ^^^ === a.ts === export { b } from "./b"; @@ -10,6 +11,6 @@ export { b } from "./b"; > : ^^^ export { default } from "./b"; ->default : typeof import("b") -> : ^^^^^^^^^^^^^^^^^^ +>default : any +> : ^^^ diff --git a/tests/baselines/reference/reexportMissingDefault3.errors.txt b/tests/baselines/reference/reexportMissingDefault3.errors.txt new file mode 100644 index 00000000000..b7965fa1eb3 --- /dev/null +++ b/tests/baselines/reference/reexportMissingDefault3.errors.txt @@ -0,0 +1,11 @@ +a.ts(2,10): error TS2305: Module '"./b"' has no exported member 'default'. + + +==== b.ts (0 errors) ==== + export const b = null; + +==== a.ts (1 errors) ==== + export { b } from "./b"; + export { default as a } from "./b"; + ~~~~~~~ +!!! error TS2305: Module '"./b"' has no exported member 'default'. \ No newline at end of file diff --git a/tests/baselines/reference/reexportMissingDefault3.symbols b/tests/baselines/reference/reexportMissingDefault3.symbols index 2c6fdef6f2d..4c505a73a30 100644 --- a/tests/baselines/reference/reexportMissingDefault3.symbols +++ b/tests/baselines/reference/reexportMissingDefault3.symbols @@ -9,6 +9,5 @@ export { b } from "./b"; >b : Symbol(b, Decl(a.ts, 0, 8)) export { default as a } from "./b"; ->default : Symbol("b", Decl(b.ts, 0, 0)) >a : Symbol(a, Decl(a.ts, 1, 8)) diff --git a/tests/baselines/reference/reexportMissingDefault3.types b/tests/baselines/reference/reexportMissingDefault3.types index 6ad7f16080a..b6908bed4be 100644 --- a/tests/baselines/reference/reexportMissingDefault3.types +++ b/tests/baselines/reference/reexportMissingDefault3.types @@ -3,6 +3,7 @@ === b.ts === export const b = null; >b : any +> : ^^^ === a.ts === export { b } from "./b"; @@ -10,8 +11,8 @@ export { b } from "./b"; > : ^^^ export { default as a } from "./b"; ->default : typeof import("b") -> : ^^^^^^^^^^^^^^^^^^ ->a : typeof import("b") -> : ^^^^^^^^^^^^^^^^^^ +>default : any +> : ^^^ +>a : any +> : ^^^