typescript - Wie kann man auf einen Namespace verweisen, der außerhalb des aktuellen Namespace mit demselben Namen deklariert ist?
Betrachten Sie das folgende TypeScript:
export namespace Test {
export const test = "test";
}
export namespace Wrapper {
export namespace Test {
export const value = Test.test; // "<script>".Wrapper.Test has no exported member 'test'.
}
}
Aufgrund der Art und Weise, wie TypeScript in JavaScript kompiliert wird, wird die zweite Deklaration von Test innerhalb von Wrapper einen neuen Scope erstellen, in dem sich Test nur auf sich selbst bezieht. Das oberste Test ist innerhalb dieses Scopes nicht verfügbar, zumindest laut dem TypeScript-Typprüfer.
Ich generiere das TypeScript aus einer anderen Sprache, in der dieser Art von Namensraumkollision kein großes Problem ist. In TypeScript führt dies jedoch zu einem Kompilierungsfehler. Die Anwendung läuft immer noch, daher scheint dies ein TypeScript-Typprüfungsproblem und kein echtes JavaScript-Laufzeitproblem zu sein.
Gibt es bekannte Umgehungslösungen innerhalb von TypeScript?
Ich habe ein Reproduktionssetup in einem Gluon-Problem eingerichtet.
Antwort #1
Sie können ein Alias erstellen, um die Namensraumkollision zu umgehen:
export namespace Test {
export const test = "test";
}
import _Test = Test;
export namespace Wrapper {
export namespace Test {
export const value = _Test.test;
}
}
