Şimdi TypeScript çıktı, benim için heyecan verici bir haber ama var olan tüm JavaScript dosyalarını TypeScript'e nasıl dönüştürebilirim.
Şimdi TypeScript çıktı, benim için heyecan verici bir haber ama var olan tüm JavaScript dosyalarını TypeScript'e nasıl dönüştürebilirim.
Yanıtlar:
Bunun çok sorunlu olacağından korkuyorum. TypeScript, JavaScript'in bir üst kümesidir . Bu, tüm geçerli JavaScript kodunun aynı zamanda geçerli TypeScript kodu olduğu anlamına gelir. Ki bu çok yanlış. Aşağıdaki kod JavaScript'te doğrudur, ancak TypeScript'te bir hata oluşturur:
var data={x:5, y:6};
data.z=5;
Verileri "ortam" olarak bildirerek JavaScript'in dinamik davranışını elde edebilirsiniz.
var data:any={x:5, y:6};
data.z=5;
Şimdi bu TypeScript'te de çalışacak. Bununla birlikte, bir .js dosyasının uzantısını .ts olarak değiştirebilir ve bu dosyayı TypeScript derleyicisine iletebilirsiniz. Bu gerçekten kafamı karıştırdı ve soruyu Freenode'daki TypeScript IRC kanalında sordum. Typescript derleyicisinin girdisini geçerli JavaScript için kontrol ettiği ve bir şey bulması durumunda hiçbir şey yapmadığı ortaya çıktı. Sezgisel olarak bu kulağa hoş geliyor. Yalnızca dosya uzantılarını güncelleyerek tüm JavaScript'inizi Typescript'e "dönüştürebilmelisiniz" ve kullanıma hazır olmalısınız. Maalesef bu beklendiği gibi çalışmıyor. Bu koda sahip olduğunuzu varsayalım:
var func=function(n){alert(n)};
var data={x:5};
data.z=6;
Düzenleme: Bunu derlemeye çalıştım ve işe yaramıyor. Üzgünüm, yanılmışım gibi görünüyor: TypeScript derleyicisi saf JavaScript'i bile kabul etmiyor. Neyin yanlış gittiğini bulmaya çalışacağım.
Dosya uzantısını .ts olarak değiştirdiniz ve diğer kodunuzda func işlevini kullandınız. İlk başta her şey yolunda görünüyor ama sonra çirkin bir böcek ortaya çıkıyor. Bazı statik tür kontrolünün muhtemelen size yardımcı olacağına karar verirsiniz ve kodu şu şekilde değiştirirsiniz:
var func=function(n:string){alert(n)};
var data={x:5};
data.z=6;
Ancak artık bu geçerli bir JavaScript kodu değildir ve derleyicinin çok sayıda hata mesajı oluşturmasına neden olacaktır. Sonuçta verilerin "z" üyesi yok. ... Varsayılan tür her zaman "herhangi" ise, ancak bu durumda tür çıkarımı tamamen işe yaramazsa, bu davranış önlenebilir.
Peki bu sorunu nasıl çözersiniz? Cevap: beyanname dosyaları. JavaScript kodunuzu projede "olduğu gibi" kullanabilir ve yine de birkaç .d.ts dosyası yardımıyla statik tür kontrolünü alabilirsiniz. Bir JavaScript dosyasında, türleri dahil olmak üzere hangi değişkenlerin, yöntemlerin ve "sınıfların" bildirildiğini derleyiciye bildirirler. Bu nedenle, derleme zamanı tür kontrolüne ve fantastik zekaya izin verir. Örneğim için bir .d.ts dosyası
declare var data:any;
declare function func(n:string);
Bunu "myjsfile.d.ts" olarak kaydedin ve typecript'e aktarın.
///<reference path="myjsfile.d.ts"/>
JavaScript komut dosyasını html dosyanıza derlenmiş typcript'in üzerine eklediğinizden emin olun. İşte ilginç bir bağlantı . "JavaScript'i TypeScript'e Dönüştürme" bölümü ilginizi çekebilir.
noEmitOnErrorkapalı olduğu sürece , yine de aktarımını çalıştırabilir ve yayabilir. Böylece, (rahatsız edici olan) hataları gösterirken, bu hataları gerçekten göz ardı edebilir ve buna rağmen TypeScript transpilasyonunu kullanabilirsiniz (örneğin, JS'den TS'ye kademeli geçişe izin verir). Ayrıca, hataların en azından bazıları gibi anahtarlar aracılığıyla devre dışı bırakılabilir noImplicitAny(belki hepsi IDK olsa da).
Güncelleme: Araç, bu yayında ayrıntılı olarak açıklanmıştır
Sürüm 9'dan başlayan ReSharper ( EAP yapıları mevcuttur ), JavaScript kodunu otomatik olarak TypeScript'e dönüştürme işlevine sahiptir. .Js dosyasını .ts olarak yeniden adlandırarak başlayabilir ve bunun gibi R # önerilerini görebilirsiniz:

Bunu gerçek dünya örneklerinde denemedim. Ancak çok sayıda JavaScript modelini dönüştürebilir.
Terminalden (mac):
for f in *.js; do mv $f `basename $f .js`.ts; done;
Tüm .js dosyalarını .ts olarak yeniden adlandırır
Bu biraz yanak dilidir - ancak Benjamin'in yukarıda işaret ettiği gibi JavaScript dosyaları geçerli TypeScript'tir . JavaScript'inize türler, sınıflar, arayüzler vb. Eklemek istiyorsanız - bu kavramları kullanarak kodunuzu kendiniz tasarlamanız ve değiştirmeniz gerekecektir. - bunun için çok az otomatik dönüşüm vardır / hiç yoktur.
GNU findutils (çoğu * nix) + Bash ile şunları yapın:
find -type f -name '*.js' -exec bash -c 'mv "${1}" "${1%???}.ts"' bash {} \;
var a = 5; a = "";