Ich habe ein Node.js-Projekt, das ich vor kurzem aus ECMAScript 6-kompatiblem JavaScript in TypeScript konvertiert habe. Ich bin mir immer noch nicht ganz bewusst, wie TypeScript und ES6 interagieren, insbesondere in Bezug auf Namespaces und Typen.TypeScript ES6-Namespaces
Ich habe einen Unterordner in meinem Projekt sql
, der, wie es klingt, eine Reihe von Funktionen exportiert, um mit der MySQL-Datenbank des Projekts zu interagieren. Ich möchte meine DB-Modelltypen in einem Sql.Models
Namespace organisieren, so dass sie z. B. referenziert werden können. Sql.Models.User
. Ich möchte, dass meine Modelle in einer oder mehreren .d.ts
Dateien im Ordner sql
deklariert werden, aber ich kann nicht herausfinden, wie man das richtig organisiert, so dass diese Typen woanders referenziert werden können. Ich kann natürlich nicht require
oder import
eine .d.ts
Datei; Das ist keine gültige TypeScript-Operation. Wie kann ich den in einer .d.ts
-Datei deklarierten Typ Sql.Models.User
in einem anderen ES6-kompatiblen TypScript-Modul verwenden?
Wenn ich es so einstelle, kann ich 'Sql.Models' nicht von einer anderen Datei, die einen Root-Level Namespace' Sql' hat, aufrufen. Vielleicht denke ich zu sehr an die Funktionsweise von C#, bei der mehrere Dateien an einem Namensraum teilnehmen können. Ich möchte, dass eine Klasse den 'Sql'-Namespace bereitstellt und die einzige Datei ist, die andere in meinem Projekt benötigen. Es wird ein paar allgemeine Funktionen definieren, wie zum Beispiel "query". Aber ich möchte auch andere Namespaces, die z. B. Modelle wie oben beschrieben bereitstellen, die alle Kinder des Namensraums "Sql" sind. – briman0094
Bin ich richtig zu verstehen, dass Sie einen Namespace namens 'Sql' und einen anderen Kind Namespace namens' Sql.Models' haben wollen? –
Das ist richtig. Ich denke, dass ich es geschafft habe, eine "models.ts" -Datei neben 'sql.ts' zu erstellen, die die Modellschnittstellen exportiert, sie dann in' sql.ts' importiert und sie dann wieder in ihren eigenen Namespace exportiert Datei ('importiere * als Modelle von" ./models "' und dann später 'exportiere Namespace Sql {export Namespace Modelle {Export Typ User = models.User;}}'. Es ist nicht so schön wie ich es möchte, aber es funktioniert und ergibt das Endergebnis, das ich will – briman0094