Sekarang TypeScript keluar, ini adalah berita yang menarik bagi saya, tetapi bagaimana saya bisa mengonversi semua file JavaScript yang ada ke TypeScript.
typescript
javascript
Gisway
sumber
sumber
Jawaban:
Saya khawatir ini akan sangat bermasalah. TypeScript adalah superset dari JavaScript . Ini menyiratkan bahwa semua kode JavaScript yang valid juga merupakan kode TypeScript yang valid. Yang salah saja. Kode berikut ini benar dalam JavaScript, tetapi membuat kesalahan dalam TypeScript:
Anda bisa mendapatkan perilaku dinamis JavaScript dengan mendeklarasikan data sebagai "ambient"
Sekarang ini akan bekerja di TypeScript juga. Namun demikian Anda dapat mengubah ekstensi file .js ke .ts dan meneruskan file ini ke kompiler TypeScript. Ini benar-benar membingungkan saya dan saya mengajukan pertanyaan di saluran IRC TypeScript di freenode. Ternyata kompiler Typecript memeriksa inputnya untuk JavaScript yang valid dan tidak melakukan apa-apa seandainya ia menemukan sesuatu. Secara intuitif ini terdengar bagus. Anda harus dapat "mengkonversi" semua JavaScript Anda ke dalam Script dengan hanya memperbarui ekstensi file dan baik untuk pergi. Sayangnya ini tidak berfungsi seperti yang diharapkan. Mari kita asumsikan Anda punya kode ini:
Sunting: Saya baru saja mencoba untuk mengkompilasi ini dan tidak berhasil. Maaf, sepertinya saya salah: Kompiler TypeScript bahkan tidak menerima JavaScript murni. Saya akan mencoba mencari tahu apa yang salah.
Anda telah mengubah ekstensi file menjadi .ts dan menggunakan fungsi func di kode Anda yang lain. Pada awalnya semuanya tampak baik-baik saja tetapi kemudian bug jelek muncul. Anda memutuskan bahwa beberapa pemeriksaan tipe statis mungkin akan membantu Anda dan Anda mengubah kode menjadi:
Tapi sekarang ini tidak lagi kode JavaScript yang valid dan akan menyebabkan kompiler menghasilkan banyak pesan kesalahan. Setelah semua data tidak memiliki anggota "z". ... Perilaku ini dapat dihindari jika tipe default selalu "ada" tetapi kemudian inferensi tipe akan sama sekali tidak berguna.
Jadi bagaimana Anda mengatasi masalah ini? Jawabannya adalah: file deklarasi. Anda dapat menggunakan kode JavaScript "sebagaimana adanya" dalam proyek dan masih mendapatkan pemeriksaan jenis statis dengan bantuan beberapa file .d.ts. Mereka memberi tahu kompilator variabel, metode, dan "kelas" apa yang dideklarasikan dalam file JavaScript, termasuk tipenya. Oleh karena itu mereka memungkinkan untuk pengecekan tipe waktu kompilasi dan kecerdasan yang fantastis. File .d.ts untuk contoh saya adalah
Simpan ini sebagai "myjsfile.d.ts" dan impor ke naskah dengan
pastikan untuk memasukkan skrip JavaScript dalam file html Anda di atas skrip yang dikompilasi. Inilah tautan yang menarik . Anda mungkin tertarik pada bagian "Mengubah JavaScript menjadi TypeScript".
sumber
noEmitOnError
tidak aktif, ia masih dapat beroperasi dan memancarkan transpilasinya. Jadi, sementara itu menunjukkan kesalahan (yang mengganggu), Anda benar-benar dapat mengabaikan kesalahan itu dan menggunakan transpilasi TypeScript meskipun itu (memungkinkan, misalnya, transisi bertahap dari JS ke TS). Juga, setidaknya beberapa kesalahan dapat dinonaktifkan melalui sakelar sepertinoImplicitAny
(mungkin semua, meskipun IDK).Pembaruan: Alat dijelaskan secara rinci dalam pos ini
ReSharper dimulai dengan versi 9 ( EAP builds available ) memiliki fungsi untuk secara otomatis mengkonversi kode JavaScript ke dalam TypeScript. Anda dapat mulai dengan mengubah nama file .js menjadi .ts dan melihat saran R # seperti ini:
Belum mencobanya di contoh dunia nyata. Tetapi ia mampu mengubah sejumlah besar pola JavaScript.
sumber
Dari terminal (mac):
Mengganti nama semua file .js menjadi .ts
Ini agak membingungkan , tetapi seperti yang ditunjukkan Benjamin di atas, file JavaScript adalah TypeScript yang valid . Jika Anda ingin menambahkan tipe, kelas, antarmuka, dll ke JavaScript Anda - Anda sendiri harus merancang dan mengubah kode Anda menggunakan konsep-konsep ini - ada sedikit / tidak ada konversi otomatis untuk ini.
Dengan GNU findutils (kebanyakan * nixes) + Bash, lakukan saja:
sumber
var a = 5; a = "";