Heim  >  Artikel  >  Web-Frontend  >  Node.js hat TypeScript nicht implementiert

Node.js hat TypeScript nicht implementiert

WBOY
WBOYOriginal
2024-08-16 06:05:02609Durchsuche

Node.js did not implement TypeScript

Ein kurzer Artikel über die Gründe, warum Node.js TypeScript nicht implementiert hat.

Das Wichtigste zuerst

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.

TypeScript: eine kurze Geschichte und einige Daten

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

Es gibt mehrere Gründe, warum Node.js TypeScript nicht implementiert hat. Hier sind meiner Meinung nach die beiden wichtigsten:

#1: TypeScript fügt Dinge zur Laufzeit ein.

Wussten Sie, was eine

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.

TypeScript folgt nicht der semantischen Versionierung (semver).

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?

Hier entsteht die Verwirrung. Node.js hat TypeScript nicht implementiert, aber unter einem experimentellen Flag das Typ-Stripping hinzugefügt. Mit dieser Funktion können Entwickler TypeScript-Code schreiben und ihn ohne Typinformationen in JavaScript kompilieren lassen. Dies ist ein Kompromiss, der es Entwicklern ermöglicht, TypeScript in Node.js zu verwenden, ohne die oben genannten Probleme einzuführen.

Möchten Sie ein Beispiel? Bitte schön:


function sum(a: number, b: number): number {
  return a + b;
}
Diese Funktion wird, wenn sie mit dem Flag --experimental-strip-types kompiliert wird, zu:


function sum(a        , b        )         {
  return a + b;
}
Hast du das gesehen? Die Typen sind verschwunden und wurden durch Leerzeichen ersetzt.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn