Ist es sinnvoll, "export" in einer "d.ts" -Datei zu verwenden?

Aug 06 2020

Ich versuche, eine Datei für die Typen zu erstellen, die global für meine App verwendet werden.

reduxState.d.ts

declare namespace MyProject {
  type Type1 = someType;
  interface SomeInterface {
    someProperty: someType
  }
}

Mit dem obigen Code kann ich bereits sehen, dass meine namespaceund ihre Mitglieder in meinen Projektdateien verfügbar sind.

Was ist also der Unterschied zwischen dem obigen Code und dem folgenden Code, der exportfür die namespaceMitglieder verwendet wird?

declare namespace MyProject {
  export type Type1 = someType;
  export interface SomeInterface {
    someProperty: someType
  }
}

Sie scheinen beide gut zu funktionieren. Was ist der Unterschied?

Von: https://www.typescriptlang.org/docs/handbook/namespaces.html#namespacing

Da die Schnittstellen und Klassen hier außerhalb des Namespace sichtbar sein sollen, wird ihnen der Export vorangestellt.

In diesem Auszug aus dem DOC scheinen sie sich auf eine zu beziehen namespace, die in einer tsund nicht in einer d.tsDatei deklariert ist . Benötigen Sie deshalb das exportin diesem Fall?

Ist es überhaupt sinnvoll, exportinnerhalb einer d.tsDatei zu verwenden?

Antworten

1 Zer0 Aug 06 2020 at 18:50

*.d.tsDateien dienen der Definition und werden zur Laufzeit vollständig ignoriert. Wenn Sie JS-Code schreiben, weil Sie über eine Bibliothek oder etwas anderes verfügen, würde ich die Verwendung des Schlüsselworts export dringend empfehlen, da dies anderen Benutzern das Erkennen der Verwendung ihres Codes erleichtert (etwas, das Sie nicht tun) exportieren, kann offensichtlich nicht woanders importiert werden).

Jetzt Ihr Anwendungsfall: Alles, was aus einem Namensraum exportiert wird, kann außerhalb von unabhängig verwendet werden. Das heißt, Sie könnten so etwas tun

const obj: MyProject.SomeInterface = { someProperty: 20 };

Da Sie *.d.tsDateien und keine *.tsDateien verwenden, spielt dies für Sie keine Rolle, solange Sie nur Schnittstellen exportieren, da diese beim Kompilieren sowieso weggelassen würden.

Ein letzter Hinweis: Mit den *.d.tsDateien können Sie Ihre Inhalte in Ihrem gesamten Projekt anzeigen. Wenn Sie jedoch Funktionen oder ähnliche Funktionen von dort importieren möchten, müssen Sie diese natürlich zuerst importieren.