3 Punkte von GN⁺ 2024-07-26 | 1 Kommentare | Auf WhatsApp teilen

Modul: --experimental-strip-types hinzugefügt

  • TypeScript-Dateien können in Node.js ausgeführt werden

    • Mit dem Flag --experimental-strip-types lassen sich TypeScript-Dateien ausführen
    • Node.js wandelt TypeScript-Quellcode in JavaScript-Quellcode um
    • Dabei wird keine Typprüfung durchgeführt, sondern die Typen werden entfernt
  • Motivation

    • Es ist wichtig, TypeScript-Dateien ohne externe Abhängigkeiten oder Loader ausführen zu können
    • Nutzer sollen node foo.ts ausführen können
  • Bedeutung von Type Stripping

    • Type Stripping bedeutet, alle Typen zu entfernen und die Eingabe in ein JavaScript-Modul umzuwandeln
    • Beispiel: const foo: string = "foo"; wird zu const foo = "foo";
  • Warum @swc/wasm-typescript gewählt wurde

    • Wegen der Einfachheit
    • Andere Tools erfordern zusätzlich Rust oder Go, aber @swc/wasm-typescript benötigt als kleines Paket nur wasm- und js-Dateien
    • Es wird auch in Deno verwendet und gilt daher als vertrauenswürdig
  • Einschränkungen

    • TypeScript-spezifische Funktionen wie Enums oder Namespaces werden nicht umgewandelt
    • Imports ohne Dateiendung werden nicht unterstützt
  • Zukünftige Pläne

    • Eine Implementierung in der nativen Schicht ist möglich
    • Unterstützung für Source Maps könnte hinzugefügt werden

Zusammenfassung von GN⁺

  • Es wird eine neue Funktion beschrieben, mit der TypeScript-Dateien in Node.js ausgeführt werden können
  • TypeScript-Dateien werden zur Ausführung in JavaScript umgewandelt, ohne dass eine Typprüfung erfolgt
  • Dadurch können Nutzer TypeScript-Dateien ohne externe Abhängigkeiten ausführen, was die Entwicklungsumgebung vereinfacht
  • Die Funktion wurde mit @swc/wasm-typescript implementiert; künftig wird auch eine Implementierung in der nativen Schicht erwogen
  • Das kann für Projekte nützlich sein, die TypeScript und JavaScript gemischt verwenden

1 Kommentare

 
GN⁺ 2024-07-26
Hacker-News-Kommentare
  • Das Entfernen von TypeScript-Typen ist ohne die TypeScript-Syntax nicht möglich. Type Stripping ist keine Operation auf Token-Ebene, und die TypeScript-Syntax verändert sich ständig.

    • Zum Beispiel wurde foo < bar & baz > ( x ) in TypeScript 1.5 anders interpretiert.
    • Um neue TypeScript-Features zu nutzen, muss man nach JS kompilieren oder die Node-Version aktuell halten.
    • Für Menschen, die Node-LTS-Releases verwenden, könnte das ein schwerer Kompromiss sein.
  • Wenn Node.js TypeScript-Dateien direkt ausführen könnte, müsste der TypeScript-Compiler keine Typen entfernen und sie nicht in JavaScript umwandeln.

    • Das ähnelt der Situation bei Python.
    • In Python gibt es mehrere Type Checker, und sie verwenden alle dieselbe Syntax für Type Hints, wenden aber unterschiedliche Bedeutungen an.
    • In JavaScript ist TypeScript der einzige populäre Type Checker geworden.
    • In Python gibt es auch Leute, die Type Hints wie Kommentare verwenden.
    • Wenn Node.js Unterstützung dafür bietet, Typen zu ignorieren, wäre das auch in JavaScript möglich.
  • Ich frage mich, wie das NPM-Ökosystem reagieren wird, wenn dieses Feature zum Standard wird.

    • Beim Veröffentlichen von NPM-Modulen stellt sich die Frage, ob man weiterhin CJS- und EJS-Versionen bauen sollte oder stattdessen engine: nodejs >= 25 in die package.json schreibt und den Build-Schritt weglässt.
    • Persönlich hoffe ich, dass in TS geschriebene NPM-Module nicht länger dist/.cjs bereitstellen.
    • Das Weglassen des Build-Schritts wird für NPM-Contributor:innen verlockend sein.
    • Das könnte Welleneffekte im NPM-Ökosystem auslösen.
    • Wenn Node.js dieses Feature ohne experimentelles Flag anbietet, ist zu erwarten, dass alle Consumer TS-Dateien akzeptieren.
    • Das könnte auch Firefox und Safari dazu zwingen, TS-Dateien zu akzeptieren.
    • Persönlich begrüße ich es, wenn ein JS-Compiler TS-Typannotationen verwirft.
    • Wenn Node .ts-Dateien akzeptiert, könnte der Transpiling-Schritt entfallen.
  • Es wäre ein großer Gewinn, wenn Node Typen in JS untersuchen könnte.

    • In Python gibt es Tools wie pydantic, die Typen untersuchen und Prüfungen erzeugen.
    • Das ermöglicht Typprüfung, Laufzeit-Datenvalidierung, API-Generierung und API-Dokumentation mit einer einzigen standardisierten Notation.
    • Derzeit braucht man dafür in JS Tools wie zod.
  • Die Developer Experience (DX) von Bun ist in diesem Bereich beispiellos und deckt die meisten Anwendungsfälle ab.

    • In Node lässt sich nicht einstellen, dass bei import keine Erweiterungen verlangt werden, und tsc lässt sich nicht so konfigurieren, dass .js-Erweiterungen automatisch hinzugefügt werden.
    • Native TypeScript-Unterstützung könnte das lösen, aber es dürfte schwer werden, die User Experience oder Performance von Bun einzuholen.
  • Ich mag TypeScript sehr und wünsche mir schon lange eine TypeScript-Runtime.

    • Ich habe Java verlassen, weil ich ein Typsystem mit mehr Features und graduelles Typing wollte.
    • Trotz der Nachteile des npm-Ökosystems ist die Nutzung von Bibliotheken weniger belastend und macht mehr Spaß.
    • Rust liegt auf einem anderen Sprachspektrum, vermittelt aber ein ähnliches Gefühl.
    • JIT war der falsche Begriff; ich wollte eigentlich den Unterschied bei Startzeit und Laufzeit zwischen JVM und V8 beschreiben.
  • Mein Lieblingsfeature von deno wird direkt in Node übernommen.

    • Ich freue mich sehr darauf, Typen entfernen zu können, ohne esbuild zu installieren.
    • In letzter Zeit habe ich Python bevorzugt, aber TypeScript ist bei Typen besser als Python.
    • Größere Skripte profitieren noch stärker von Typen.
  • Das war ein sehr wichtiger Monat für Node.

    • In v22.5.0 wurde node:sqlite hinzugefügt, und jetzt kommt TypeScript-Unterstützung dazu.
    • Mir gefällt die Richtung, in die sich Node entwickelt.
  • Ich bin der Autor des PR, AMA.

  • Ich habe vor langer Zeit angefangen, Node.js für Backend-Arbeit zu verwenden, und es bot viele Vorteile gegenüber PHP.

    • Node war allerdings etwas umständlich, und man musste es zusammensetzen, um daraus die Sprache zu machen, die man haben wollte.
    • Ich habe dann angefangen, Golang zu verwenden, und durch Typsicherheit wurde das Programmieren einfacher.
    • TypeScript ist eine gute Option, aber eben nur noch ein weiteres Add-on.
    • Ein großer Vorteil von Node ist die Geschwindigkeit beim Prototyping, und durch die Verwendung von TypeScript könnte dieser Vorteil wieder aufgehoben werden.