Czy istnieje narzędzie do konwersji plików JavaScript na TypeScript [zamknięty]

Teraz pojawił się TypeScript, jest to dla mnie ekscytująca wiadomość, ale jak mogę przekonwertować wszystkie istniejące pliki JavaScript na TypeScript.

Author: Will, 2013-01-19

3 answers

Obawiam się, że będzie to bardzo problematyczne. TypeScript jest supersetem języka JavaScript . Oznacza to, że cały poprawny kod JavaScript jest również poprawnym kodem maszynopisu. Co jest po prostu złe. Poniższy kod jest poprawny w JavaScript, ale tworzy błąd w maszynopisie:

var data={x:5, y:6};
data.z=5;

Można uzyskać dynamiczne zachowanie JavaScript, deklarując dane jako "ambient"

var data:any={x:5, y:6};
data.z=5;

Teraz to będzie działać również w maszynopisie. Niemniej jednak można zmienić rozszerzenie a .plik js do .ts i przekaż ten plik do kompilatora maszynopisu. To naprawdę mnie zdezorientowało i zadałem pytanie na kanale IRC na freenode. Okazało się, że kompilator Typescript sprawdza swoje dane wejściowe pod kątem poprawnego JavaScript i po prostu nic nie robi na wypadek gdyby coś znalazł. Intuicyjnie brzmi to dobrze. Powinieneś być w stanie" przekonwertować " cały swój JavaScript do maszynopisu, po prostu aktualizując rozszerzenia plików i być gotowy do pracy. Niestety nie działa to zgodnie z oczekiwaniami. Załóżmy, że masz ten kod:

var func=function(n){alert(n)};

var data={x:5};
data.z=6;

Edytuj: Właśnie próbowałem to skompilować i nie działa. Przepraszam, chyba się pomyliłem: kompilator maszynopisu nie akceptuje nawet czystego JavaScript. Postaram się dowiedzieć, co poszło nie tak.

Zmieniłeś rozszerzenie pliku na .ts i użyj funkcji func w innym kodzie. Na początku wszystko wydaje się w porządku, ale potem pojawia się brzydki robak. Decydujesz, że statyczne sprawdzanie typów prawdopodobnie ci pomoże i zmieniasz kod do:

var func=function(n:string){alert(n)};

var data={x:5};
data.z=6;

Ale teraz nie jest to już poprawny kod JavaScript i spowoduje, że kompilator wygeneruje wiele komunikatów o błędach. Wszakże wszystkie dane nie mają członu "z". ... Tego zachowania można by uniknąć, gdyby Typ domyślny zawsze był "dowolny", ale wnioskowanie o typie byłoby całkowicie bezużyteczne.

Jak więc rozwiązać ten problem ? Odpowiedź brzmi: pliki deklaracji. Możesz użyć kodu JavaScript" tak jak jest " w projekcie i nadal uzyskać statyczne sprawdzanie typu za pomocą kilku .pliki d. ts. Informują one kompilator, jakie zmienne, metody i "klasy" są zadeklarowane w pliku JavaScript, łącznie z ich typami. Dlatego pozwalają na sprawdzanie typu w czasie kompilacji i fantastyczny intellisense. A .plik d. ts dla mojego przykładu to

declare var data:any;
declare function func(n:string);

Zapisz to jako " myjsfile.d. ts " i zaimportować go do maszynopisu za pomocą

///<reference path="myjsfile.d.ts"/>

Pamiętaj, aby umieścić skrypt JavaScript w pliku html nad skompilowanym maszynopisem. Oto ciekawy link . Możesz być interesuje Cię dział "przekształcenie JavaScript w TypeScript".

 85
Author: lhk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-29 14:09:25

Update: Narzędzie zostało szczegółowo opisane w tym poście

ReSharper począwszy od wersji 9 (EAP buduje dostępne) posiada funkcjonalność automatycznej konwersji kodu JavaScript na TypeScript. Możesz zacząć od zmiany nazwy .plik js do .ts i zobacz r # sugestie takie jak Ta:

Nie próbowałem tego na prawdziwych przykładach. Ale jest w stanie konwertować dużą liczbę wzorców JavaScript.

 46
Author: Shkredov S.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-05 16:22:16

Z terminala (mac):

for f in *.js; do mv $f `basename $f .js`.ts; done;

Zmienia nazwę NA all .Pliki js do .ts

Jest to nieco język-w-policzek - ale jak Benjamin wskazuje powyżej pliki JavaScript są poprawne TypeScript . Jeśli chcesz dodać typy, klasy, interfejsy itp.do swojego JavaScript - sam będziesz musiał zaprojektować i zmienić swój kod za pomocą tych pojęć - nie ma/nie ma automatycznej konwersji do tego.

With GNU findutils (most *nixes) + Bash, just do:

find -type f -name '*.js' -exec bash -c 'mv "${1}" "${1%???}.ts"' bash {} \;
 2
Author: 7zark7,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-24 14:54:10