Einleitung: "Ihre .ts-Datei öffnet sich nicht? Sie sind nicht allein"
\n\nStellen Sie sich vor: Sie schreiben coolen Code in TypeScript, speichern die Datei mit der Erweiterung .ts, führen den Befehl node myfile.ts aus... und erhalten als Antwort so etwas wie: "Unknown file extension ".ts". Kommt Ihnen bekannt vor? Wenn Sie auf Stack Overflow nachgeschaut haben, wissen Sie, dass diese Frage tausende Aufrufe und hunderte Kommentare gesammelt hat. Das Problem ist alt, aber immer noch aktuell.
In diesem Artikel kopieren wir nicht einfach eine Antwort aus dem Forum. Wir analysieren warum dies passiert, wie man es behebt und was man tun kann, um diesen Fehler nie wieder zu sehen. Sie erfahren, wie Sie ein TypeScript-Projekt richtig konfigurieren, ts-node und die Konfiguration tsconfig.json verwenden. Los geht's!
Warum tritt der Fehler "Unknown file extension ".ts" auf?
\n\nKommen wir direkt zum Kern. Node.js versteht standardmäßig keine .ts-Dateien. Es kennt nur .js, .json, .mjs und .cjs. Wenn Sie node myfile.ts schreiben, versucht Node.js ehrlich, den TypeScript-Code wie normales JavaScript auszuführen, stößt aber auf Syntax, die ihm unbekannt ist (z. B. Typen, Interfaces, Generics).
Das Ergebnis ist ein Fehler. Es gibt aber auch eine andere Situation: Sie verwenden ts-node oder tsx, sehen aber trotzdem dieselbe Meldung. Warum? Weil in modernen Versionen von Node.js (ab Version 16) eine strenge Überprüfung der Erweiterungen in package.json hinzugefügt wurde, insbesondere wenn "type": "module" gesetzt ist.
Hauptgründe:
\n- \n
- Direkter Start von
node file.ts— Node.js kann TypeScript nicht spontan kompilieren. \n - Fehlendes
ts-nodeodertsx— kein Tool zur Übersetzung vorhanden. \n - Falsche Konfiguration von
tsconfig.json— z. B. Modul oder Target nicht angegeben. \n - Probleme mit
package.json— wenn"type": "module"gesetzt ist, kannts-nodeeine explizite Angabe der Erweiterung erfordern. \n
Lösung 1: ts-node verwenden (klassischer Weg)
\n\nDer einfachste Weg, TypeScript ohne vorherige Kompilierung auszuführen, ist die Verwendung von ts-node. Dieses Paket kompiliert .ts-Dateien im Speicher und übergibt das Ergebnis an Node.js.
Installation und Ausführung
\nnpm install -g ts-node\nts-node myfile.ts\n\nWenn Sie ein lokales Projekt verwenden, installieren Sie es besser als dev-Abhängigkeit:
\nnpm install --save-dev ts-node\nnpx ts-node myfile.ts\n\nBeispiel einer einfachen Datei hello.ts:
const greet = (name: string): string => {\n return `Hallo, ${name}!`;\n};\n\nconsole.log(greet("Welt"));\n\nAusführen: npx ts-node hello.ts — und wir sehen in der Konsole "Hallo, Welt!". Es funktioniert!
Aber es gibt einen Haken: "type": "module"
\nWenn in Ihrer package.json "type": "module" angegeben ist, kann ts-node sich weigern zu arbeiten. In diesem Fall müssen Sie entweder diese Zeile vorübergehend entfernen oder das Flag --esm verwenden:
npx ts-node --esm myfile.ts\n\nLösung 2: tsx verwenden (modernes Werkzeug)
\n\ntsx ist eine schnellere Alternative zu ts-node, basierend auf esbuild. Es funktioniert sofort mit ESM und benötigt keine zusätzlichen Flags.
Installation:
\nnpm install --save-dev tsx\n\nAusführung:
\nnpx tsx myfile.ts\n\nBeispiel mit modernen TypeScript-Funktionen:
\n// types.ts\nexport interface User {\n id: number;\n name: string;\n email: string;\n}\n\nconst user