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.
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".
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.
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 {} \;
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