2016-10-24 3 views
0

Wir haben eine große TS-Anwendung meist weit vor 2.0 geschrieben. Wir verwenden keine Module, sondern nur die Option outfile. Wir verwenden bisher global Typings, aber jetzt unterstützen einige der von typings bereitgestellten Typisierungen die globale Verwendung nicht (soweit ich es verstehe).Wie verwendet man eine Eingabe, die ein externes Modul als global bereitstellt?

Zum Beispiel versuche ich jetzt, die Typisierung für markdown-it zu verwenden, die nichts dem globalen Namespace aussetzt, daher findet der Compiler die markdownit-Funktion nicht.

Ich bin ziemlich verwirrt darüber, wie wir diese Art von Typisierung unter diesen Umständen verwenden sollten, würden alle Hinweise geschätzt werden.

Beispielcode:

// test.ts var result = markdownit().render("*some markdown*"); <-- `markdownit` not found

Als ich import es versuchen, gibt es Fehler natürlich, weil ich nicht Modulen. Also stecke ich fest.

Antwort

1

Angenommen, Sie möchten markdown-it als globale Variable verwenden markdownit, können Sie es in Ihrer eigenen Datei, dass augments global scope (diese Funktion ist neu in 2.0).

Erstellen Sie eine Datei markdown-it-global.d.ts

declare module 'markdown-it-global' { 

    import * as MarkdownIt from 'markdown-it'; 

    global { 
     var markdownit: typeof MarkdownIt; 
    } 

} 

Dies erklärt ein Umgebungsmodul, das globale Reichweite erweitert - wenn Sie markdown-it-global.d.ts zusammen mit allen anderen typecsript Quelldateien und Erklärungen wie typing/index.d.ts sind, wird es überall globale Variable markdownit zur Verfügung stellen.

Die import innerhalb verwendet es Markdown-It-Typings, die ein Modul deklarieren, aber es wird nur für Typchecking verwendet werden, es wird keine Auswirkungen auf den generierten Javascript-Code haben und es nicht wirklich erfordern, Module zu verwenden.

+0

Ich möchte es wirklich so verwenden, weil ich keine andere Wahl habe. Wir haben Tausende von Zeilen ohne Module geschrieben, es ist eine harte Arbeit, sie zu transformieren, was wir uns nicht leisten können. Bei einem neuen Projekt würde ich definitiv mit Modulen gehen. Danke für die Antwort, werde es morgen versuchen. –

Verwandte Themen