2016-10-25 9 views
0

Ich bin nicht sicher, ob dies möglich ist oder nicht, aber ich habe ein Szenario, wo in meinem d.ts Datei ich folgende Erklärungen haben will:Modulname in Typoskript überlappende Ausgabe

declare module final { 
    export class Test { 

    } 
} 

declare module root { 
    module final { 
     export class MainClass extends final.Test { 

     } 
    } 
} 

Und die Frage, die ich Das heißt, dass TypeScript "Property 'Test' existiert nicht für den Typ 'Typeof final'" für den extends final.Test Teil.

So haben wir einen Modulnamen überlappende Problem, ist das lösbar ohne die Notwendigkeit, die Namen einzigartig zu machen?

+0

Wo gibt es diese Module? Sind sie unter Fenster? –

+0

Ich arbeite mit NativeScript, das ein "Muster" von Typdefinitionsdateien für die nativen Android/iOS-Bibliotheken in einer separaten .d.ts-Datei deklariert, um diese Warnungen während der Entwicklung zu entfernen, sie werden von der {N} korrekt aufgelöst. Laufzeiten danach. Das obige Code-Snippet ist eine vereinfachte Version solcher Dateien, aber im Grunde ist es so, wie Sie es in einer einzigen Datei sehen. Dasselbe in einer .ts-Datei verursacht auch diesen Fehler. –

Antwort

1

Es gibt keine Möglichkeit zu spezifizieren, dass Sie das andere final Modul meinen.
Was Sie tun können, ist Ihre Module mit unterschiedlichen Namen zu nennen:

declare module final1 { 
    export class Test {} 
} 

declare module root { 
    module final2 { 
     export class MainClass extends final1.Test {} 
    } 
} 

Oder Sie können dann unter einem gemeinsam Eltern platzieren:

declare module myModule { 
    export module final { 
     export class Test {} 
    } 
} 

declare module myModule { 
    declare module root { 
     module final { 
      export class MainClass extends myModule.final.Test {} 
     } 
    } 
} 

im Browser gibt es bereits einen gemeinsamen Elternteil, das das ist Fenster, so können Sie einfach tun:

export class MainClass extends window.final.Test {} 

Aber ich bin nicht sicher, wie das in NativeScript getan hat.

+0

Vielen Dank für die Antwort, ich bin mir bewusst, dass ich verschiedene Namen verwenden kann, wie in meinem Fragen-Text angegeben, aber wollte sehen, ob ich etwas nicht vermisse. Vielen Dank. –

+0

Dann müssen Sie ein gemeinsames Elternmodul hinzufügen –

0

Sie können das type Schlüsselwort ein Alias ​​für final.Test vor module.root wie diese erklären erklären:

declare module final { 
    export class Test { 
    } 
} 

// define 'finalTest' as an alias 
type finalTest = final.test; 

declare module root { 
    module final { 
     export class MainClass extends finalTest { 
     } 
    } 
}