Apa Ketangkasan dan mengapa saya menggunakannya di tempat JavaScript?
Bisa anda jelaskan apa Ketangkasan bahasa?
Apa yang bisa ia lakukan itu JavaScript atau pustaka yang tersedia tidak dapat melakukan, yang akan memberi saya alasan untuk mempertimbangkan hal itu?
1630
5
1000ft melihat...
[Naskah][1] adalah superset dari JavaScript yang terutama menyediakan opsional statis mengetik, kelas dan interface. Salah satu manfaat besar adalah untuk mengaktifkan Ide untuk memberikan lingkungan yang kaya untuk bercak kesalahan umum *saat anda mengetik kode*.Untuk mendapatkan ide dari apa yang saya maksud, menonton Microsoft's video pengantar pada bahasa.
Untuk proyek JavaScript, mengadopsi Ketangkasan mungkin menghasilkan lebih banyak perangkat lunak yang kuat, sementara masih deployable mana biasa JavaScript aplikasi akan dijalankan.
Ini adalah open source, tapi anda hanya mendapatkan pintar Intellisense saat anda mengetik jika anda menggunakan IDE didukung. Awalnya, ini hanya Microsoft's Visual Studio (juga dicatat dalam posting blog dari Miguel de Icaza). Hari ini, lainnya IDEs menawarkan Naskah dukungan juga.
ada teknologi lain yang seperti itu?
Ada's [CoffeeScript][5], tapi itu benar-benar melayani tujuan yang berbeda. IMHO, CoffeeScript menyediakan dibaca bagi manusia, tetapi Ketangkasan juga menyediakan mendalam untuk dibaca *alat-alat* melalui opsional statis mengetik (lihat ini [posting blog terbaru][6] untuk lebih sedikit kritik). Ada's juga [Panah][7] tapi itu's penuh pada penggantian untuk JavaScript (meskipun itu [dapat menghasilkan kode JavaScript][8])Contoh
Sebagai contoh, di sini's beberapa Naskah (anda dapat bermain dengan di Ketangkasan Bermain anak)
Dan berikut's JavaScript ini akan menghasilkan
Perhatikan bagaimana Ketangkasan mendefinisikan tipe dari variabel anggota kelas dan metode parameter. Ini akan dihapus ketika menerjemahkan ke JavaScript, tapi digunakan oleh IDE dan compiler untuk melihat kesalahan, seperti lewat tipe numerik untuk konstruktor.
It's juga mampu menyimpulkan jenis yang tidak't menyatakan secara eksplisit, misalnya, itu akan menentukan
menyapa()
metode mengembalikan sebuah string.Debugging Ketangkasan
Banyak browser dan IDEs menawarkan langsung debugging dukungan melalui sourcemaps. Melihat ini Stack Overflow pertanyaan untuk rincian lebih lanjut: [Debugging Naskah code dengan Visual Studio][10]Ingin tahu lebih lanjut?
Saya awalnya menulis jawaban ini ketika Naskah itu masih panas-off-the-menekan. Check out [Lodewijk's jawaban][11] untuk pertanyaan ini untuk beberapa saat ini lebih detail.Ketangkasan's kaitannya dengan JavaScript
Selama membangun, 2016 konferensi co-desainer Naskah Anders Hejlsberg memberi penjelasan rinci dan demonstrasi fitur ini: video (dari 44:30 56:30).
Kompilasi
Untuk menggunakan Ketangkasan anda perlu membangun proses untuk mengkompilasi kode JavaScript. Proses membangun umumnya hanya membutuhkan waktu beberapa detik tentu saja tergantung pada ukuran proyek anda. Ketangkasan compiler mendukung incremental kompilasi (
--menonton
compiler bendera) sehingga semua perubahan selanjutnya dapat disusun pada kecepatan yang lebih besar. Ketangkasan penyusun dapat inline sumber informasi peta yang dihasilkan .js file atau membuat terpisah .file peta. Sumber informasi peta yang dapat digunakan oleh debugging utilitas seperti Chrome DevTools dan lain IDE's untuk berhubungan garis di JavaScript untuk orang-orang yang dihasilkan mereka dalam Naskah. Hal ini memungkinkan anda untuk mengatur breakpoints dan memeriksa variabel selama runtime langsung pada Naskah ketikan kode. Sumber informasi peta bekerja dengan cukup baik, itu sekitar jauh sebelum Ketangkasan, tetapi debugging Naskah ini umumnya tidak begitu besar seperti saat menggunakan JavaScript ini diatas. Mengambilini
kata kunci misalnya. Karena untuk berubah semantikini
kata kunci di sekitar penutupan sejak ES2015,ini
mungkin benar-benar ada selama runtime sebagai sebuah variabel yang disebut_this
(lihat jawaban ini). Ini mungkin membingungkan anda selama debugging tetapi umumnya tidak masalah jika anda tahu tentang hal ini atau periksa kode JavaScript. Perlu dicatat bahwa Babel akan mengalami hal yang sama persis jenis masalah. Ada beberapa trik lain yang Naskah kompilator dapat dilakukan, seperti menghasilkan mencegat kode berdasarkan dekorator, menghasilkan modul yang memuat kode untuk modul yang berbeda sistem dan parsing BEJ. Namun, anda mungkin akan memerlukan membangun alat selain Ketangkasan compiler. Misalnya, jika anda ingin untuk kompres kode anda anda akan memiliki untuk menambah alat-alat lain untuk membangun proses untuk melakukannya. Ada Naskah kompilasi plugin yang tersedia untuk Webpack, Tegukan, Kasar dan cukup banyak yang lain JavaScript membangun alat di luar sana. Ketangkasan dokumentasi memiliki bagian di mengintegrasikan dengan membangun tools meliputi mereka semua. A linter ini juga tersedia jika anda ingin lebih membangun waktu pemeriksaan. Ada juga sejumlah besar benih proyek-proyek di luar sana yang akan membantu anda memulai dengan Ketangkasan dalam kombinasi dengan banyak teknologi lain seperti Sudut 2, Bereaksi, Ember, SystemJS, Webpack, Menelan, dll.JavaScript interoperabilitas
Sejak Naskah ini sangat berkaitan erat dengan JavaScript ini memiliki kemampuan interoperabilitas, tapi beberapa pekerjaan tambahan yang diperlukan untuk bekerja dengan JavaScript pustaka dalam Naskah. Ketangkasan definisi yang diperlukan agar Naskah compiler memahami bahwa fungsi panggilan seperti
_.groupBy
atausudut.copy
atau$.fadeOut
tidak pada kenyataannya pernyataan ilegal. Definisi fungsi-fungsi ini ditempatkan dalam.d.ts
file. Bentuk paling sederhana suatu definisi yang dapat anda ambil adalah untuk memungkinkan sebuah identifier yang akan digunakan dengan cara apapun. Misalnya, ketika menggunakan Lodash, satu baris file definisimenyatakan var _ : apapun
akan memungkinkan anda untuk memanggil fungsi yang anda inginkan pada_
, tapi kemudian, tentu saja, anda juga masih bisa membuat kesalahan:_.foobar()
akan menjadi hukum Ketangkasan panggilan, tapi, tentu saja, ilegal panggilan pada saat run-time. Jika anda ingin jenis yang tepat dukungan dan code completion anda file definisi kebutuhan untuk menjadi lebih tepat (lihat lodash definisi untuk contoh). Npm modul yang datang pra-dikemas dengan jenis mereka sendiri definisi secara otomatis dipahami oleh Ketangkasan compiler (lihat dokumentasi). Karena cukup banyak yang lain semi-populer library JavaScript yang tidak memasukkan sendiri definisi seseorang di luar sana telah membuat definisi jenis lain yang tersedia melalui npm modul. Modul-modul ini diawali dengan "@jenis/" dan berasal dari repositori Github disebut DefinitelyTyped. Ada satu peringatan: definisi jenis harus sesuai dengan versi library yang anda gunakan pada saat run-time. Jika mereka tidak, Ketangkasan mungkin melarang anda dari pemanggilan fungsi atau dereferencing variabel yang ada atau memungkinkan anda untuk memanggil fungsi atau dereference variabel yang tidak ada, hanya karena jenis tidak sesuai dengan run-time pada waktu kompilasi. Jadi pastikan anda memuat versi yang tepat dari jenis definisi untuk versi yang tepat dari perpustakaan anda menggunakan. Jujur, ada sedikit kerumitan untuk ini dan itu mungkin salah satu alasan anda tidak memilih Naskah, tapi bukannya pergi untuk sesuatu seperti Babel yang tidak menderita dari keharusan untuk mendapatkan jenis definisi di semua. Di sisi lain, jika anda tahu apa yang anda lakukan anda dapat dengan mudah mengatasi segala jenis masalah yang disebabkan oleh salah atau hilang file definisi.Mengkonversi dari JavaScript untuk Ketangkasan
Apapun
.js
file dapat diganti ke.ts
file dan berlari melalui Naskah compiler untuk mendapatkan sintaksis yang sama kode JavaScript sebagai output (jika itu sintaksis yang benar di tempat pertama). Bahkan ketika Naskah compiler akan kesalahan kompilasi ini masih akan menghasilkan.js
file. Itu bahkan dapat menerima.js
file sebagai input dengan--allowJs
bendera. Hal ini memungkinkan anda untuk memulai dengan Ketangkasan segera. Sayangnya, kompilasi kesalahan yang mungkin terjadi di awal. Salah satu tidak perlu ingat bahwa ini bukan acara-berhenti kesalahan seperti anda dapat digunakan untuk dengan penyusun lainnya. Kompilasi kesalahan datang di awal ketika mengkonversi proyek JavaScript untuk Ketangkasan proyek yang tidak dapat dihindari oleh Ketangkasan's alam. Naskah cek semua kode validitas dan dengan demikian perlu tahu tentang semua fungsi-fungsi dan variabel yang digunakan. Dengan demikian jenis definisi yang perlu berada di tempat untuk semua dari mereka jika kesalahan kompilasi terikat untuk terjadi. Seperti yang disebutkan dalam bab di atas, untuk cukup banyak framework JavaScript ada.d.ts
file yang dapat dengan mudah diperoleh dengan pemasangan DefinitelyTyped paket. Itu mungkin, bagaimanapun, bahwa anda've digunakan beberapa perpustakaan jelas yang tidak ada Naskah definisi tersedia atau yang anda've polyfilled beberapa JavaScript primitif. Dalam hal ini, anda harus menyediakan jenis definisi untuk bit ini untuk kompilasi kesalahan menghilang. Hanya membuat.d.ts
file dan memasukkannya dalam tsconfig.json'sfile
array, sehingga selalu dianggap oleh Ketangkasan compiler. Di dalamnya menyatakan bit tersebut bahwa Naskah yang tidak tahu tentang jenisada
. Setelah anda've menghilangkan semua kesalahan anda bisa secara bertahap memperkenalkan mengetik untuk bagian-bagian yang sesuai dengan kebutuhan anda. Beberapa pekerjaan yang di (re)konfigurasi anda membangun pipa juga akan dibutuhkan untuk mendapatkan Ketangkasan dalam membangun pipa. Seperti yang disebutkan dalam bab tentang kompilasi ada banyak sumber daya yang baik di luar sana dan saya mendorong anda untuk mencari benih proyek-proyek yang menggunakan kombinasi dari alat-alat yang anda ingin bekerja dengan. Rintangan terbesar adalah kurva belajar. Saya mendorong anda untuk bermain-main dengan proyek kecil pada awalnya. Lihatlah bagaimana ia bekerja, bagaimana ia membangun, satu file yang menggunakan, bagaimana dikonfigurasi, bagaimana fungsinya dalam IDE anda, bagaimana terstruktur, alat-alat yang menggunakan, dll. Mengkonversi besar basis kode JavaScript untuk Naskah ini bisa dilakukan ketika anda tahu apa yang anda lakukan. Baca blog ini misalnya pada mengkonversi 600k garis untuk naskah dalam 72 jam). Hanya pastikan anda memiliki pemahaman yang baik tentang bahasa sebelum anda membuat lompatan.Adopsi
Ketangkasan adalah open-source (Apache 2 lisensi, lihat GitHub) dan didukung oleh Microsoft. Anders Hejlsberg, arsitek utama dari C# adalah ujung tombak proyek tersebut. It's sangat aktif proyek; Ketangkasan tim telah merilis banyak fitur-fitur baru dalam beberapa tahun terakhir dan banyak orang-orang besar yang masih direncanakan untuk datang (lihat roadmap). Beberapa fakta tentang adopsi dan popularitas:
Ketangkasan melakukan sesuatu yang mirip dengan apa yang less atau sass tidak untuk CSS. Mereka adalah super set ini, yang berarti bahwa setiap kode JS yang anda tulis adalah valid Ketangkasan kode. Plus anda dapat menggunakan barang lainnya yang menambah bahasa, dan transpiled kode akan berlaku js. Anda bahkan dapat mengatur JS versi yang anda inginkan anda sehingga kode pada.
Saat ini Naskah adalah satu set super ES2015, sehingga mungkin menjadi pilihan yang baik untuk mulai belajar js baru fitur dan transpile untuk kebutuhan standar untuk proyek anda.
"Ketangkasan dasar-Dasar" - sebuah Pluralsight video-tentu saja dengan Dan Wahlin dan John Papa adalah benar-benar baik, saat ini (25 Maret 2016) diperbarui untuk mencerminkan Naskah 1.8, pengantar untuk Naskah.
Bagi saya benar-benar fitur yang baik, di samping bagus kemungkinan untuk intellisense, ini adalah kelas, antarmuka, modul, kemudahan pelaksanaan AMD, dan kemungkinan untuk menggunakan Visual Studio Ketangkasan debugger ketika dipanggil dengan IE.
Untuk meringkas: Jika digunakan sebagaimana dimaksud, Ketangkasan dapat membuat pemrograman JavaScript lebih dapat diandalkan, dan lebih mudah. Hal ini dapat meningkatkan produktivitas programmer JavaScript secara signifikan lebih lengkap SDLC.
Ecma script 5 (ES5) yang semua browser mendukung dan dikompilasi. ES6/ES2015 dan ES/2016 datang tahun ini dengan banyak perubahan sehingga muncul perubahan ini ada sesuatu di antara yang harus mengambil peduli tentang jadi Ketangkasan.
• Naskah adalah Jenis -> Berarti kita harus menentukan tipe data dari masing-masing properti dan metode. Jika anda tahu C# kemudian Ketangkasan lebih mudah untuk memahami.
• Keuntungan besar dari Naskah yang kita identitas Jenis terkait isu-isu awal sebelum masuk ke produksi. Hal ini memungkinkan unit tes untuk gagal jika ada ketidakcocokan jenis.