typescript - Hvordan kan du referere til et navnerom deklarert utenfor det nåværende navnerommet med samme navn?


Vurder følgende 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'.
    }
}

På grunn av måten TypeScript kompilerer til JavaScript, vil den andre deklarasjonen av Test innenfor Wrapper opprette et nytt scope der Test kun vil referere til seg selv. Topplags-Test er ikke tilgjengelig innenfor det scope, i det minste ifølge TypeScript typekontrolleren.

Jeg genererer TypeScript fra et annet språk hvor denne typen navneområde-konflikt ikke er noe problem. I TypeScript derimot, resulterer det i en kompilasjonsfeil. Applikasjonen kjører fortsatt, så dette ser ut til å være et TypeScript-typekontrollproblem og ikke et ekte JavaScript-runtime-problem.

Finnes det noen kjente løsninger på dette i TypeScript?

Jeg har satt opp et reproduksjonseksempel i et Gluon-problem.

Svar #1

Du kan opprette et alias for å overvinne navnekollisjonen:

export namespace Test {
    export const test = "test";
}

import _Test = Test;

export namespace Wrapper {
    export namespace Test {
        export const value = _Test.test;
    }
}