diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c7094a21cd0..b1b2714e15d 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -31965,7 +31965,7 @@ namespace ts { } function checkAliasSymbol(node: ImportEqualsDeclaration | ImportClause | NamespaceImport | ImportSpecifier | ExportSpecifier) { - const symbol = getSymbolOfNode(node); + let symbol = getSymbolOfNode(node); const target = resolveAlias(symbol); const shouldSkipWithJSExpandoTargets = symbol.flags & SymbolFlags.Assignment; @@ -31976,6 +31976,7 @@ namespace ts { // Based on symbol.flags we can compute a set of excluded meanings (meaning that resolved alias should not have, // otherwise it will conflict with some local declaration). Note that in addition to normal flags we include matching SymbolFlags.Export* // in order to prevent collisions with declarations that were exported from the current module (they still contribute to local names). + symbol = getMergedSymbol(symbol.exportSymbol || symbol); const excludedMeanings = (symbol.flags & (SymbolFlags.Value | SymbolFlags.ExportValue) ? SymbolFlags.Value : 0) | (symbol.flags & SymbolFlags.Type ? SymbolFlags.Type : 0) | diff --git a/tests/baselines/reference/mergeWithImportedNamespace.errors.txt b/tests/baselines/reference/mergeWithImportedNamespace.errors.txt new file mode 100644 index 00000000000..7839264b604 --- /dev/null +++ b/tests/baselines/reference/mergeWithImportedNamespace.errors.txt @@ -0,0 +1,13 @@ +tests/cases/compiler/f2.ts(1,9): error TS2440: Import declaration conflicts with local declaration of 'N'. + + +==== tests/cases/compiler/f1.ts (0 errors) ==== + export namespace N { export var x = 1; } + +==== tests/cases/compiler/f2.ts (1 errors) ==== + import {N} from "./f1"; + ~ +!!! error TS2440: Import declaration conflicts with local declaration of 'N'. + export namespace N { + export interface I {x: any} + } \ No newline at end of file diff --git a/tests/baselines/reference/mergeWithImportedNamespace.js b/tests/baselines/reference/mergeWithImportedNamespace.js index ec2eb4a1087..ff7248a68f3 100644 --- a/tests/baselines/reference/mergeWithImportedNamespace.js +++ b/tests/baselines/reference/mergeWithImportedNamespace.js @@ -5,7 +5,6 @@ export namespace N { export var x = 1; } //// [f2.ts] import {N} from "./f1"; -// partial revert of https://github.com/Microsoft/TypeScript/pull/7583 to prevent breaking changes export namespace N { export interface I {x: any} } diff --git a/tests/baselines/reference/mergeWithImportedNamespace.symbols b/tests/baselines/reference/mergeWithImportedNamespace.symbols index 58b0f0a811f..2b82ea26252 100644 --- a/tests/baselines/reference/mergeWithImportedNamespace.symbols +++ b/tests/baselines/reference/mergeWithImportedNamespace.symbols @@ -7,11 +7,10 @@ export namespace N { export var x = 1; } import {N} from "./f1"; >N : Symbol(N, Decl(f2.ts, 0, 8), Decl(f2.ts, 0, 23)) -// partial revert of https://github.com/Microsoft/TypeScript/pull/7583 to prevent breaking changes export namespace N { >N : Symbol(N, Decl(f2.ts, 0, 23)) export interface I {x: any} ->I : Symbol(I, Decl(f2.ts, 2, 20)) ->x : Symbol(I.x, Decl(f2.ts, 3, 24)) +>I : Symbol(I, Decl(f2.ts, 1, 20)) +>x : Symbol(I.x, Decl(f2.ts, 2, 24)) } diff --git a/tests/baselines/reference/mergeWithImportedNamespace.types b/tests/baselines/reference/mergeWithImportedNamespace.types index b0b55435636..950d52aff38 100644 --- a/tests/baselines/reference/mergeWithImportedNamespace.types +++ b/tests/baselines/reference/mergeWithImportedNamespace.types @@ -8,7 +8,6 @@ export namespace N { export var x = 1; } import {N} from "./f1"; >N : typeof N -// partial revert of https://github.com/Microsoft/TypeScript/pull/7583 to prevent breaking changes export namespace N { export interface I {x: any} >x : any diff --git a/tests/baselines/reference/mergeWithImportedType.errors.txt b/tests/baselines/reference/mergeWithImportedType.errors.txt new file mode 100644 index 00000000000..1ac48946a04 --- /dev/null +++ b/tests/baselines/reference/mergeWithImportedType.errors.txt @@ -0,0 +1,11 @@ +tests/cases/compiler/f2.ts(1,9): error TS2440: Import declaration conflicts with local declaration of 'E'. + + +==== tests/cases/compiler/f1.ts (0 errors) ==== + export enum E {X} + +==== tests/cases/compiler/f2.ts (1 errors) ==== + import {E} from "./f1"; + ~ +!!! error TS2440: Import declaration conflicts with local declaration of 'E'. + export type E = E; \ No newline at end of file diff --git a/tests/baselines/reference/mergeWithImportedType.js b/tests/baselines/reference/mergeWithImportedType.js index efa95d77630..27622372a83 100644 --- a/tests/baselines/reference/mergeWithImportedType.js +++ b/tests/baselines/reference/mergeWithImportedType.js @@ -5,7 +5,6 @@ export enum E {X} //// [f2.ts] import {E} from "./f1"; -// partial revert of https://github.com/Microsoft/TypeScript/pull/7583 to prevent breaking changes export type E = E; //// [f1.js] diff --git a/tests/baselines/reference/mergeWithImportedType.symbols b/tests/baselines/reference/mergeWithImportedType.symbols index d14d76f91e7..acfaef80c6d 100644 --- a/tests/baselines/reference/mergeWithImportedType.symbols +++ b/tests/baselines/reference/mergeWithImportedType.symbols @@ -7,7 +7,6 @@ export enum E {X} import {E} from "./f1"; >E : Symbol(E, Decl(f2.ts, 0, 8), Decl(f2.ts, 0, 23)) -// partial revert of https://github.com/Microsoft/TypeScript/pull/7583 to prevent breaking changes export type E = E; >E : Symbol(E, Decl(f2.ts, 0, 23)) >E : Symbol(E, Decl(f2.ts, 0, 8), Decl(f2.ts, 0, 23)) diff --git a/tests/baselines/reference/mergeWithImportedType.types b/tests/baselines/reference/mergeWithImportedType.types index 7ba671ce468..84b9cc28138 100644 --- a/tests/baselines/reference/mergeWithImportedType.types +++ b/tests/baselines/reference/mergeWithImportedType.types @@ -7,7 +7,6 @@ export enum E {X} import {E} from "./f1"; >E : typeof E -// partial revert of https://github.com/Microsoft/TypeScript/pull/7583 to prevent breaking changes export type E = E; >E : E diff --git a/tests/cases/compiler/mergeWithImportedNamespace.ts b/tests/cases/compiler/mergeWithImportedNamespace.ts index 79a94fd0ba4..0b112da86e8 100644 --- a/tests/cases/compiler/mergeWithImportedNamespace.ts +++ b/tests/cases/compiler/mergeWithImportedNamespace.ts @@ -4,7 +4,6 @@ export namespace N { export var x = 1; } // @filename: f2.ts import {N} from "./f1"; -// partial revert of https://github.com/Microsoft/TypeScript/pull/7583 to prevent breaking changes export namespace N { export interface I {x: any} } \ No newline at end of file diff --git a/tests/cases/compiler/mergeWithImportedType.ts b/tests/cases/compiler/mergeWithImportedType.ts index 2310022012f..d31f16f8d92 100644 --- a/tests/cases/compiler/mergeWithImportedType.ts +++ b/tests/cases/compiler/mergeWithImportedType.ts @@ -4,5 +4,4 @@ export enum E {X} // @filename: f2.ts import {E} from "./f1"; -// partial revert of https://github.com/Microsoft/TypeScript/pull/7583 to prevent breaking changes export type E = E; \ No newline at end of file