diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index fa2a56e2fdf..85be34b8d29 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3869,7 +3869,14 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return exportDefaultSymbol; } const hasDefaultOnly = isOnlyImportableAsDefault(specifier, moduleSymbol); - const hasSyntheticDefault = canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias, specifier); + 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) { + hasSyntheticDefault = true; + } if (!exportDefaultSymbol && !hasSyntheticDefault && !hasDefaultOnly) { if (hasExportAssignmentSymbol(moduleSymbol) && !allowSyntheticDefaultImports) { const compilerOptionName = moduleKind >= ModuleKind.ES2015 ? "allowSyntheticDefaultImports" : "esModuleInterop"; diff --git a/tests/baselines/reference/reexportMissingDefault.errors.txt b/tests/baselines/reference/reexportMissingDefault.errors.txt deleted file mode 100644 index 91637fa1f74..00000000000 --- a/tests/baselines/reference/reexportMissingDefault.errors.txt +++ /dev/null @@ -1,11 +0,0 @@ -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 afba6a1c2f7..3ef3ab2eeef 100644 --- a/tests/baselines/reference/reexportMissingDefault.types +++ b/tests/baselines/reference/reexportMissingDefault.types @@ -3,7 +3,6 @@ === b.ts === export const b = null; >b : any -> : ^^^ === a.ts === export { b } from "./b"; @@ -11,6 +10,6 @@ export { b } from "./b"; > : ^^^ export { default } from "./b"; ->default : any -> : ^^^ +>default : typeof import("b") +> : ^^^^^^^^^^^^^^^^^^ diff --git a/tests/baselines/reference/reexportMissingDefault1.errors.txt b/tests/baselines/reference/reexportMissingDefault1.errors.txt deleted file mode 100644 index dfee891aa42..00000000000 --- a/tests/baselines/reference/reexportMissingDefault1.errors.txt +++ /dev/null @@ -1,12 +0,0 @@ -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 3b058c8337b..7527bc6cad3 100644 --- a/tests/baselines/reference/reexportMissingDefault1.types +++ b/tests/baselines/reference/reexportMissingDefault1.types @@ -3,7 +3,6 @@ === b.ts === export const b = null; >b : any -> : ^^^ === a.ts === export { b } from "./b"; @@ -11,6 +10,6 @@ export { b } from "./b"; > : ^^^ export { default } from "./b"; ->default : any -> : ^^^ +>default : typeof import("b") +> : ^^^^^^^^^^^^^^^^^^ diff --git a/tests/baselines/reference/reexportMissingDefault2.errors.txt b/tests/baselines/reference/reexportMissingDefault2.errors.txt deleted file mode 100644 index 91637fa1f74..00000000000 --- a/tests/baselines/reference/reexportMissingDefault2.errors.txt +++ /dev/null @@ -1,11 +0,0 @@ -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 56de966eefd..f003a83ba96 100644 --- a/tests/baselines/reference/reexportMissingDefault2.types +++ b/tests/baselines/reference/reexportMissingDefault2.types @@ -3,7 +3,6 @@ === b.ts === export const b = null; >b : any -> : ^^^ === a.ts === export { b } from "./b"; @@ -11,6 +10,6 @@ export { b } from "./b"; > : ^^^ export { default } from "./b"; ->default : any -> : ^^^ +>default : typeof import("b") +> : ^^^^^^^^^^^^^^^^^^ diff --git a/tests/baselines/reference/reexportMissingDefault3.errors.txt b/tests/baselines/reference/reexportMissingDefault3.errors.txt deleted file mode 100644 index b7965fa1eb3..00000000000 --- a/tests/baselines/reference/reexportMissingDefault3.errors.txt +++ /dev/null @@ -1,11 +0,0 @@ -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 4c505a73a30..2c6fdef6f2d 100644 --- a/tests/baselines/reference/reexportMissingDefault3.symbols +++ b/tests/baselines/reference/reexportMissingDefault3.symbols @@ -9,5 +9,6 @@ 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 b6908bed4be..6ad7f16080a 100644 --- a/tests/baselines/reference/reexportMissingDefault3.types +++ b/tests/baselines/reference/reexportMissingDefault3.types @@ -3,7 +3,6 @@ === b.ts === export const b = null; >b : any -> : ^^^ === a.ts === export { b } from "./b"; @@ -11,8 +10,8 @@ export { b } from "./b"; > : ^^^ export { default as a } from "./b"; ->default : any -> : ^^^ ->a : any -> : ^^^ +>default : typeof import("b") +> : ^^^^^^^^^^^^^^^^^^ +>a : typeof import("b") +> : ^^^^^^^^^^^^^^^^^^