Jetzt, da TypeScript herauskommt, ist es eine aufregende Nachricht für mich, aber wie kann ich alle vorhandenen JavaScript-Dateien in TypeScript konvertieren?
typescript
javascript
Gisway
quelle
quelle
Antworten:
Ich befürchte, dass dies sehr problematisch sein wird. TypeScript ist eine Obermenge von JavaScript . Dies bedeutet, dass jeder gültige JavaScript-Code auch gültiger TypeScript-Code ist. Welches ist einfach falsch. Der folgende Code ist in JavaScript korrekt, erzeugt jedoch einen Fehler in TypeScript:
Sie können das dynamische Verhalten von JavaScript ermitteln, indem Sie Daten als "Umgebungsdaten" deklarieren.
Dies funktioniert nun auch in TypeScript. Sie können jedoch die Erweiterung einer .js-Datei in .ts ändern und diese Datei an den TypeScript-Compiler übergeben. Das hat mich wirklich verwirrt und ich habe die Frage im TypeScript IRC-Kanal auf freenode gestellt. Es stellte sich heraus, dass der Typescript-Compiler seine Eingabe auf gültiges JavaScript überprüft und nichts unternimmt, falls er etwas findet. Intuitiv klingt das gut. Sie sollten in der Lage sein, Ihr gesamtes JavaScript in Typescript zu "konvertieren", indem Sie lediglich die Dateierweiterungen aktualisieren und loslegen. Leider funktioniert das nicht wie erwartet. Nehmen wir an, Sie haben diesen Code:
Bearbeiten: Ich habe gerade versucht, dies zu kompilieren und es funktioniert nicht. Es tut mir leid, ich habe mich anscheinend geirrt: Der TypeScript-Compiler akzeptiert nicht einmal reines JavaScript. Ich werde versuchen herauszufinden, was schief gelaufen ist.
Sie haben die Dateierweiterung in .ts geändert und die Funktion func in Ihrem anderen Code verwendet. Zuerst scheint alles in Ordnung zu sein, aber dann taucht ein hässlicher Fehler auf. Sie entscheiden, dass eine statische Typprüfung Ihnen wahrscheinlich helfen würde, und ändern den Code in:
Dies ist jedoch kein gültiger JavaScript-Code mehr und führt dazu, dass der Compiler viele Fehlermeldungen generiert. Immerhin haben Daten kein Mitglied "z". ... Dieses Verhalten könnte vermieden werden, wenn der Standardtyp immer "any" wäre, aber dann wäre die Typinferenz völlig nutzlos.
Wie lösen Sie dieses Problem? Die Antwort lautet: Deklarationsdateien. Sie können Ihren JavaScript-Code "wie besehen" im Projekt verwenden und trotzdem mithilfe einiger .d.ts-Dateien eine statische Typprüfung erhalten. Sie informieren den Compiler darüber, welche Variablen, Methoden und "Klassen" in einer JavaScript-Datei deklariert sind, einschließlich ihrer Typen. Daher ermöglichen sie eine Typprüfung zur Kompilierungszeit und eine fantastische Intelligenz. Eine .d.ts-Datei für mein Beispiel wäre
Speichern Sie dies als "myjsfile.d.ts" und importieren Sie es mit
Stellen Sie sicher, dass Sie das JavaScript-Skript über dem kompilierten Typoskript in Ihre HTML-Datei aufnehmen. Hier ist ein interessanter Link . Vielleicht interessiert Sie der Abschnitt "JavaScript in TypeScript verwandeln".
quelle
noEmitOnError
ist, kann er seine Transpilation ausführen und ausgeben. Während also Fehler angezeigt werden (was störend ist), können Sie diese Fehler tatsächlich ignorieren und trotzdem die TypeScript-Transpilation verwenden (was beispielsweise einen schrittweisen Übergang von JS zu TS ermöglicht). Außerdem können zumindest einige der Fehler durch Schalter wienoImplicitAny
(vielleicht alle, obwohl IDK) deaktiviert werden .Update: Das Tool wird in diesem Beitrag ausführlich beschrieben
ReSharper ab Version 9 ( EAP-Builds verfügbar ) bietet Funktionen zum automatischen Konvertieren von JavaScript-Code in TypeScript. Sie können mit dem Umbenennen der .js-Datei in .ts beginnen und R # -Vorschläge wie diesen anzeigen:
Ich habe es nicht an Beispielen aus der Praxis versucht. Es ist jedoch in der Lage, eine große Anzahl von JavaScript-Mustern zu konvertieren.
quelle
Vom Terminal (Mac):
Benennt alle .js-Dateien in .ts um
Das ist ein bisschen frech - aber wie Benjamin oben hervorhebt, sind JavaScript-Dateien gültiges TypeScript . Wenn Sie Ihrem JavaScript Typen, Klassen, Schnittstellen usw. hinzufügen möchten - Sie müssen Ihren Code mithilfe dieser Konzepte selbst entwerfen und ändern -, gibt es dafür nur wenig / keine automatische Konvertierung.
Mit GNU findutils (die meisten * nixes) + Bash machen Sie einfach:
quelle
var a = 5; a = "";