tsc --module generiert unabhängig vom Argument immer die gleiche Ausgabe
-
12-12-2019 - |
Frage
Ich bin ziemlich neu in Javascript, NodeJS und – natürlich – TypeScript.Ich würde gerne mit den Compiler-Diensten experimentieren src/services
(Windows) zur Bereitstellung von Intellisense usw.für einen Redakteur.
Soweit ich das beurteilen kann, muss ich dazu in der Lage sein require
den Code der TypeScript-Dienste in einem NodeJS-Server und kommunizieren mit diesem vom Editor aus.Ich konnte keinen NodeJS-spezifischen TypeScript-Dienstcode finden, daher denke ich, dass ich den Dienstcode mit kompilieren müsste --module amd
um es NodeJS über RequireJS zur Verfügung zu stellen.
Wenn das oben Gesagte korrekt ist, versuche ich, den Dienstcode mit zu kompilieren --module amd
liefern genau die gleichen Ergebnisse wie die Verwendung des Standardmodultyps (siehe unten).
$ tsc.cmd --module amd --out amd.js .\languageService.ts
$ tsc.cmd --out comm.js .\languageService.ts
$ diff.exe .\amd.js .\comm.js
$
Lösung
Das ist zwar verwirrend, aber der Code in languageService.ts befindet sich nicht in einem „Modul“ im Sinne der AMD/RequireJS-Definition von „Modul“.
Die Spezifikation bezieht sich auf Dinge innerhalb von a module
Block als „interne Module“.Das sehen Sie in languageService.ts.Sie können sie sich eher wie Container oder Singletons vorstellen, die einen Namen der obersten Ebene offenlegen (ein Blick auf die Code-Generation für ein einfaches internes Modul verdeutlicht dies ziemlich deutlich).Sie konsumieren diese wie normale Objekte der obersten Ebene ohne jeglichen Modullader.
Produzieren extern Module (wie in der Spezifikation benannt) für require
erfolgt durch Setzen der export
Direktive für eine Deklaration der obersten Ebene in einer .ts-Datei (siehe Spezifikationsabschnitt 9.2.1).Es gibt einige Beispiele (z.B.Imageboard) zum Download zur Verfügung, die dies tun, wenn Sie interessiert sind.
Andere Tipps
Sie müssen Ihre Module als definiert haben export module
, nicht dein module
und kompilieren Sie es dann mit --m amd
oder --module amd
.
Es hat ein paar Stunden gedauert, bis ich es realisiert habe :)