Ein kurzer Artikel über die Gründe, warum Node.js TypeScript nicht implementiert hat.
Was folgt, ist eine Erklärung dessen, was in Node.js in Bezug auf TypeScript getan wurde und was nicht gemacht wurde.
Dieser Artikel ist nicht als Kritik am Node.js-Team oder am TypeScript-Team gedacht.
Eigentlich ist es genau das Gegenteil.
Ich glaube ernsthaft, dass das Node.js-Team die bestmögliche Wahl getroffen hat, indem es TypeScript so „implementiert“ hat, wie sie es getan haben.
Was ich hier wirklich betone, ist, dass Node.js TypeScript nicht implementiert hat. Sie haben einfach eine Art Unterstützung dafür hinzugefügt. Dies ist ein entscheidender Unterschied, der meiner Meinung nach in Diskussionen über Node.js und TypeScript oft übersehen wird.
In den letzten Wochen habe ich mehr als 50 Artikel gezählt, die in den von mir gelesenen Newslettern zitiert wurden und in denen erwähnt wurde, dass Node.js TypeScript implementiert hat.
Ich denke, es ist an der Zeit, diesen Punkt ein für alle Mal zu klären.
Spoiler-Warnung: Node.js hat TypeScript nicht implementiert.
Im Jahr 2010 veröffentlichte Microsoft TypeScript, eine Obermenge von JavaScript, die der Sprache statische Typisierung hinzufügt. TypeScript wurde entwickelt, um einige der Mängel von JavaScript zu beheben, beispielsweise die mangelnde Typsicherheit und die Schwierigkeit, große Codebasen zu pflegen. Seit seiner Veröffentlichung hat TypeScript bei Entwicklern an Beliebtheit gewonnen, und viele Projekte haben es als ihre Hauptsprache übernommen.
Laut der neuesten State Of JS-Umfrage ist TypeScript praktisch überall. 78 % der Entwickler nutzen TypeScript für mindestens 50 % ihrer Entwicklungszeit, daher ist es kein Wunder, dass das Echo von „Node.js implementierte TypeScript“ selbst die tiefsten Ecken des Webs erreichte.
Aber um es klarzustellen: Es ist nicht passiert. Und das wird es wahrscheinlich auch nie.Die Probleme
#1: TypeScript fügt Dinge zur Laufzeit ein.
Enum zur Laufzeit wird? Ein Objekt.
Und dies ist nur eines der – glücklicherweise – wenigen Beispiele dafür, wie TypeScript Dinge zur Laufzeit einfügt. Dies ist ein Problem für Node.js, da es bedeuten würde, dass die Laufzeit die Funktionen von TypeScript kennen müsste, was viel Komplexität und Overhead mit sich bringen würde.Wenn Node.js seine Konsistenz mit ECMAScript beibehalten möchte und sich für den Rest seiner Existenz nicht mit der Abhängigkeitsverwaltung befassen muss, kann es TypeScript in der aktuellen Form nicht als Abhängigkeit akzeptieren.
#2: Semantische Versionierung.
Node.js hingegen folgt streng Semver und verfügt über drei verschiedene Release-Linien (derzeit haben wir 18.x, 20.x, 22.x). Dies bedeutet, dass in Neben- oder Patch-Releases wichtige Änderungen eingeführt werden können, die zu Kompatibilitätsproblemen mit vorhandenem Code führen können.
Außerdem ist die Anzahl der unterstützten Plattformen riesig, sodass es nicht einfach ist, alles unter Kontrolle zu halten.
Node.js kann TypeScript einfach nicht als Abhängigkeit akzeptieren, weil es sonst kaputt gehen würde. Dies ist ein grundlegendes Problem, das Node.js daran hindert, TypeScript zu implementieren.
Was haben sie also getan?
Möchten Sie ein Beispiel? Bitte schön:
function sum(a: number, b: number): number { return a + b; }
function sum(a , b ) { return a + b; }
Aber warum?, fragen Sie sich vielleicht. Nun, weil dadurch die Sourcemaps-Referenzen erhalten bleiben, ohne dass für diese ein separater Erstellungsprozess erforderlich ist.
Intern erfolgt dies über ein Paket namens amaro, das swc umschließt – ein bekanntes Build-Tool, das das eigentliche Strippen übernimmt.Natürlich gibt es Einschränkungen, wie zum Beispiel die Unfähigkeit, TypeScript-spezifische Funktionen wie die zuvor erwähnten
Enums zu verwenden. Dennoch ist es ein großer Fortschritt, zu verhindern, dass Leute 135 Konfigurationsdateien schreiben, damit eine Summenfunktion zwei Zahlen akzeptiert und eine dritte zurückgibt.
Ciao,
Michael.
Das obige ist der detaillierte Inhalt vonNode.js hat TypeScript nicht implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!