diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 9f77641faf5..3f53795cbe6 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -43901,6 +43901,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } const isIllegalExportDefaultInCJS = !node.isExportEquals && + !(node.flags & NodeFlags.Ambient) && compilerOptions.verbatimModuleSyntax && (moduleKind === ModuleKind.CommonJS || getSourceFileOfNode(node).impliedNodeFormat === ModuleKind.CommonJS); diff --git a/tests/baselines/reference/verbatimModuleSyntaxRestrictionsCJS.errors.txt b/tests/baselines/reference/verbatimModuleSyntaxRestrictionsCJS.errors.txt index 0be83274c5d..9bcb8b0214e 100644 --- a/tests/baselines/reference/verbatimModuleSyntaxRestrictionsCJS.errors.txt +++ b/tests/baselines/reference/verbatimModuleSyntaxRestrictionsCJS.errors.txt @@ -1,4 +1,3 @@ -/decl.d.ts(2,1): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main.ts(1,8): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main.ts(2,13): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main.ts(3,10): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. @@ -12,13 +11,17 @@ /main7.ts(2,1): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. -==== /decl.d.ts (1 errors) ==== +==== /decl.d.ts (0 errors) ==== declare function esmy(): void; export default esmy; - ~~~~~~~~~~~~~~~~~~~~ -!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. export declare function funciton(): void; +==== /ambient.d.ts (0 errors) ==== + declare module "ambient" { + const _default: number; + export default _default; + } + ==== /main.ts (6 errors) ==== import esmy from "./decl"; // error ~~~~ diff --git a/tests/baselines/reference/verbatimModuleSyntaxRestrictionsCJS.js b/tests/baselines/reference/verbatimModuleSyntaxRestrictionsCJS.js index e48c08b8b4c..e8a03f7fb2f 100644 --- a/tests/baselines/reference/verbatimModuleSyntaxRestrictionsCJS.js +++ b/tests/baselines/reference/verbatimModuleSyntaxRestrictionsCJS.js @@ -5,6 +5,12 @@ declare function esmy(): void; export default esmy; export declare function funciton(): void; +//// [ambient.d.ts] +declare module "ambient" { + const _default: number; + export default _default; +} + //// [main.ts] import esmy from "./decl"; // error import * as esmy2 from "./decl"; // error diff --git a/tests/baselines/reference/verbatimModuleSyntaxRestrictionsCJS.symbols b/tests/baselines/reference/verbatimModuleSyntaxRestrictionsCJS.symbols index e85557f10c9..45b089f4d4a 100644 --- a/tests/baselines/reference/verbatimModuleSyntaxRestrictionsCJS.symbols +++ b/tests/baselines/reference/verbatimModuleSyntaxRestrictionsCJS.symbols @@ -8,6 +8,17 @@ export default esmy; export declare function funciton(): void; >funciton : Symbol(funciton, Decl(decl.d.ts, 1, 20)) +=== /ambient.d.ts === +declare module "ambient" { +>"ambient" : Symbol("ambient", Decl(ambient.d.ts, 0, 0)) + + const _default: number; +>_default : Symbol(_default, Decl(ambient.d.ts, 1, 9)) + + export default _default; +>_default : Symbol(_default, Decl(ambient.d.ts, 1, 9)) +} + === /main.ts === import esmy from "./decl"; // error >esmy : Symbol(esmy, Decl(main.ts, 0, 6)) diff --git a/tests/baselines/reference/verbatimModuleSyntaxRestrictionsCJS.types b/tests/baselines/reference/verbatimModuleSyntaxRestrictionsCJS.types index 968c15c3f93..cf5f4dbfd5f 100644 --- a/tests/baselines/reference/verbatimModuleSyntaxRestrictionsCJS.types +++ b/tests/baselines/reference/verbatimModuleSyntaxRestrictionsCJS.types @@ -8,6 +8,17 @@ export default esmy; export declare function funciton(): void; >funciton : () => void +=== /ambient.d.ts === +declare module "ambient" { +>"ambient" : typeof import("ambient") + + const _default: number; +>_default : number + + export default _default; +>_default : number +} + === /main.ts === import esmy from "./decl"; // error >esmy : () => void diff --git a/tests/baselines/reference/verbatimModuleSyntaxRestrictionsESM(esmoduleinterop=false).errors.txt b/tests/baselines/reference/verbatimModuleSyntaxRestrictionsESM(esmoduleinterop=false).errors.txt index b8003fc5d39..f5d5aaad4f0 100644 --- a/tests/baselines/reference/verbatimModuleSyntaxRestrictionsESM(esmoduleinterop=false).errors.txt +++ b/tests/baselines/reference/verbatimModuleSyntaxRestrictionsESM(esmoduleinterop=false).errors.txt @@ -17,6 +17,12 @@ declare class CJSy {} export = CJSy; +==== /ambient.d.ts (0 errors) ==== + declare module "ambient" { + const _export: number; + export = _export; + } + ==== /types.ts (0 errors) ==== interface Typey {} export type { Typey }; diff --git a/tests/baselines/reference/verbatimModuleSyntaxRestrictionsESM(esmoduleinterop=false).js b/tests/baselines/reference/verbatimModuleSyntaxRestrictionsESM(esmoduleinterop=false).js index 9246ef5022e..a1aa16107fc 100644 --- a/tests/baselines/reference/verbatimModuleSyntaxRestrictionsESM(esmoduleinterop=false).js +++ b/tests/baselines/reference/verbatimModuleSyntaxRestrictionsESM(esmoduleinterop=false).js @@ -4,6 +4,12 @@ declare class CJSy {} export = CJSy; +//// [ambient.d.ts] +declare module "ambient" { + const _export: number; + export = _export; +} + //// [types.ts] interface Typey {} export type { Typey }; diff --git a/tests/baselines/reference/verbatimModuleSyntaxRestrictionsESM(esmoduleinterop=true).errors.txt b/tests/baselines/reference/verbatimModuleSyntaxRestrictionsESM(esmoduleinterop=true).errors.txt index 7a6b23e911e..d984e4effea 100644 --- a/tests/baselines/reference/verbatimModuleSyntaxRestrictionsESM(esmoduleinterop=true).errors.txt +++ b/tests/baselines/reference/verbatimModuleSyntaxRestrictionsESM(esmoduleinterop=true).errors.txt @@ -13,6 +13,12 @@ declare class CJSy {} export = CJSy; +==== /ambient.d.ts (0 errors) ==== + declare module "ambient" { + const _export: number; + export = _export; + } + ==== /types.ts (0 errors) ==== interface Typey {} export type { Typey }; diff --git a/tests/baselines/reference/verbatimModuleSyntaxRestrictionsESM(esmoduleinterop=true).js b/tests/baselines/reference/verbatimModuleSyntaxRestrictionsESM(esmoduleinterop=true).js index 9246ef5022e..a1aa16107fc 100644 --- a/tests/baselines/reference/verbatimModuleSyntaxRestrictionsESM(esmoduleinterop=true).js +++ b/tests/baselines/reference/verbatimModuleSyntaxRestrictionsESM(esmoduleinterop=true).js @@ -4,6 +4,12 @@ declare class CJSy {} export = CJSy; +//// [ambient.d.ts] +declare module "ambient" { + const _export: number; + export = _export; +} + //// [types.ts] interface Typey {} export type { Typey }; diff --git a/tests/cases/conformance/externalModules/verbatimModuleSyntaxRestrictionsCJS.ts b/tests/cases/conformance/externalModules/verbatimModuleSyntaxRestrictionsCJS.ts index d1df5e8bbd5..c01dde661fd 100644 --- a/tests/cases/conformance/externalModules/verbatimModuleSyntaxRestrictionsCJS.ts +++ b/tests/cases/conformance/externalModules/verbatimModuleSyntaxRestrictionsCJS.ts @@ -9,6 +9,12 @@ declare function esmy(): void; export default esmy; export declare function funciton(): void; +// @Filename: /ambient.d.ts +declare module "ambient" { + const _default: number; + export default _default; +} + // @Filename: /main.ts import esmy from "./decl"; // error import * as esmy2 from "./decl"; // error diff --git a/tests/cases/conformance/externalModules/verbatimModuleSyntaxRestrictionsESM.ts b/tests/cases/conformance/externalModules/verbatimModuleSyntaxRestrictionsESM.ts index dcc87bdb4a2..74e8b3eb923 100644 --- a/tests/cases/conformance/externalModules/verbatimModuleSyntaxRestrictionsESM.ts +++ b/tests/cases/conformance/externalModules/verbatimModuleSyntaxRestrictionsESM.ts @@ -8,6 +8,12 @@ declare class CJSy {} export = CJSy; +// @Filename: /ambient.d.ts +declare module "ambient" { + const _export: number; + export = _export; +} + // @Filename: /types.ts interface Typey {} export type { Typey };