Warum verwendet Typescript das Schlüsselwort "export", um Klassen und Schnittstellen öffentlich zu machen?
Während es einmal mit Typescript ich realisierte, dass meine Klassen innerhalb von Modulen (als namespaces) nicht zur Verfügung standen, für andere Klassen, es sei denn, ich schrieb das export
Schlüsselwort vor Ihnen, wie zum Beispiel:
module some.namespace.here
{
export class SomeClass{..}
}
So, jetzt kann ich mit dem obigen code wie dieser:
var someVar = new some.namespace.here.SomeClass();
Aber ich habe mich nur gefragt, warum dieses Schlüsselwort verwendet wird, im Gegensatz zu nur mit der public
Schlüsselwort, das verwendet wird, bei level Methode, um anzugeben, dass eine Methode oder Eigenschaft sollte von außen zugänglich. Warum also nicht einfach das gleiche Mechanismus, um Klassen und interfaces usw. extern sichtbar?
Würde dadurch resultierende code wie:
module some.namespace.here
{
public class SomeClass{..}
}
InformationsquelleAutor der Frage Grofit | 2013-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hauptgrund ist, dass
export
entspricht die Pläne für ECMAScript. Man könnte argumentieren, dass Sie "benutzt "exportieren" anstelle von "public", aber abgesehen vom "export/private/protected" als ein schlecht abgestimmtes set von zugriffsmodifizierer, ich glaube, es gibt einen subtilen Unterschied zwischen den beiden erklärt, dass diese.Im Typoskript, die Kennzeichnung einer Klasse als
public
oderprivate
hat keinen Effekt auf den generierten JavaScript. Es ist einfach ein design - /compile-Zeit-tool, das Sie verwenden können, zu stoppen Ihre Typoskript-code den Zugriff auf Dinge, die es nicht sollte.Mit der
export
Schlüsselwort, das JavaScript fügt eine Zeile zum hinzufügen der exportierten Eintrag, um das Modul. In deinem Beispiel:here.SomeClass = SomeClass;
.So konzeptionell, Sichtbarkeit, gesteuert durch
public
undprivate
ist nur für den Werkzeug -, in der Erwägung, dass dieexport
Schlüsselwort ändert die Ausgabe.InformationsquelleAutor der Antwort user75525
Ein paar Dinge hinzufügen Steve Fenton Antwort:
export
bereits bedeutet zwei verschiedene Dinge (je nachdem, ob es sich bei top-level-oder nicht); es bedeutet eine Dritte ist wahrscheinlich schlimmer als das hinzufügenpublic
/private
public
vsexport
ist trivial. Wir haben uns verändert Schlüsselwörter, um ein paar bereits; es ist nicht schwer.export
(unexport
??), soprivate
ist die logische Wahl. Sobald Sieprivate
es wäre etwas verrückt, um nicht wählen Siepublic
als sein Pendantexport
zu ändern, Sichtbarkeit in internen Modulen ist die best-guess-Ausrichtung mit ES6-ModuleInformationsquelleAutor der Antwort Ryan Cavanaugh