


Intervensi TypeScript: Memecahkan Ketagihan Semakan Masa Jalanan Anda dengan Byzantium
Begini, kita perlu bercakap tentang ketagihan pemeriksaan jenis anda. Ya, anda – yang mempunyai 47 contoh semakan dalam perisian tengah pengesahan anda. Pembangun yang menulis lebih banyak kes ujian daripada kod sebenar. Orang yang menganggap TypeScript seperti itu hanya ulasan JSDoc yang mewah.
Intervensi
Izinkan saya melukis gambar kepada anda: Sekarang tengah hari, anda sedang menikmati secawan kopi ke-4 anda dan anda sedang menyahpepijat isu pengeluaran. Log menunjukkan pengguna entah bagaimana melepasi lima belas lapisan pengesahan masa jalan anda. Anda mempunyai lebih banyak ujian unit berbanding Twitter mempunyai pengguna aktif, namun entah bagaimana, entah bagaimana, seseorang berjaya menghantar nombor di mana rentetan sepatutnya berada.
"Tetapi itu mustahil!" anda menangis, menatal laporan liputan ujian anda menunjukkan 100% murni. "Saya menyemak untuk ini!"
Adakah anda? Adakah anda sangat? Atau adakah anda hanya menulis cek yang sama tiga kali:
- Sekali dalam antara muka TypeScript
- Sekali lagi dalam perisian tengah pengesahan anda
- Dan sekali lagi dalam ujian unit anda
Berhenti Menguji Apa TypeScript Sudah Tahu
Berikut ialah idea revolusioner: Bagaimana jika kita hanya... mempercayai pengkompil? Saya tahu, konsep liar. Tapi dengar cakap saya.
interface ValidRabbit { username: string; password: string; } interface InvalidRabbit { username: number; password: string; } type ValidateRabbit<Rabbit> = Assert< //assert that Rabbit is of type {username, password} Is.Type< User, { username: string; password: string; } >, //custom compile time exceptions "Trix are for kids. Provide a username and password.", User >; // Ha! Silly Rabbit... function checkRabbit<T>(rabbit: ValidateRabbit<T>) { // .... protect your trix } declare const rabbit1: ValidRabbit; declare const rabbit2: InvalidRabbit; checkRabbit(rabbit1); checkRabbit(rabbit2); /** ~~~~~~~~~ * └───── Type Exception! "...Provide a username and password" */
"Tetapi Bagaimana dengan Pengeluaran?"
Saya boleh mendengar anda sekarang: "Tetapi bagaimana jika seseorang menghantar JSON tidak sah ke API saya?"
Pertama sekali, siapa yang menyakiti anda? Kedua, ya, sahkan sempadan API anda. Tetapi apabila data tersebut memasuki domain skrip taip anda, sudah tiba masanya untuk melepaskannya. Biarkan penyusun menjadi bouncer anda.
Inilah perkara yang dibawa oleh Byzantium kepada pihak isu amanah anda:
// Define your trust boundaries type APIRequest<Request> = Assert< And< Is.On<Request, "body">, Or<Is.In<Request["method"], "POST">, Is.In<Request["method"], "PUT">> >;, "Someone's being naughty with our API" >; // Now everything inside is type-safe function handleRequest<R>(req: APIRequest<R>) { // If it compiles, it's valid // If it's valid, it compiles // This is the way }
Pasukan DevOps Akan Menyayangi Anda (Untuk Sekali)
Gambar ini: Saluran paip CI/CD anda selesai dalam beberapa minit dan bukannya beberapa jam. Log pengeluaran anda tidak diisi dengan ralat jenis. Bil AWS anda tidak kelihatan seperti nombor telefon.
Bagaimana? Kerana Byzantium menggerakkan pemeriksaan jenis anda untuk menyusun masa. Tiada lagi:
- Menjalankan beribu-ribu ujian unit yang hanya menyemak jenis
- Menggunakan kitaran CPU menyemak jenis yang sama berulang kali
- Bangun pada pukul 3 pagi kerana seseorang melepasi fungsi yang tidak ditentukan dengan jelas bahawa ia mahukan rentetan
// Before: Your CPU crying for help function validateUserMiddleware(req, res, next) { try { validateId(req.params.id) // CPU cycle validateBody(req.body) // CPU cycle validatePermissions(req.user) // CPU cycle validateToken(req.headers.auth) // CPU cycle // Your CPU is now considering a career change next() } catch (e) { res.status(400).json({ error: e.message }) } } // After: Your CPU sending you a thank you note type ValidRequest = Assert< And< Is.On<Request, 'params.id'>, Is.On<Request, 'body'>, Is.On<Request, 'user'>, Is.On<Request, 'headers.auth'> >, "Invalid request shape" >; function handleRequest(req: ValidRequest) { // Just business logic, no trust issues }
"Tetapi Saya Suka Ujian Menulis!"
Hebat! Tulis ujian untuk perkara yang sebenarnya memerlukan ujian:
- Logik perniagaan
- Mata integrasi
- Aliran kerja pengguna
- Algoritma kompleks
Anda tahu apa yang tidak memerlukan ujian? Sama ada rentetan sebenarnya rentetan. Biarkan TypeScript menangani krisis kewujudan itu.
Perbincangan Nyata: Faedahnya
-
Pembangunan Lebih Pantas
- Tiada lagi menulis pengesahan yang sama tiga cara berbeza
- Tangkap ralat pada masa penyusunan, bukan pada 3 PG
- Luangkan masa pada ciri, bukan plat dandang pengesahan
-
Prestasi Lebih Baik
- Sifar masa jalanan overhed untuk semakan jenis
- Saiz berkas yang lebih kecil (tiada perpustakaan pengesahan)
- CPU gembira, hidup bahagia
-
Keselamatan yang Dipertingkat
- Jaminan peringkat jenis tidak boleh dipintas
- Tiada lagi "ops, terlupa untuk mengesahkannya"
- Liputan lengkap secara lalai
-
Impian DevOps
- Saluran paip CI/CD yang lebih pantas
- Kos infrastruktur yang lebih rendah
- Insiden pengeluaran yang lebih sedikit
- Pasukan SRE yang lebih gembira (hasil mungkin berbeza-beza)
Bermula
interface ValidRabbit { username: string; password: string; } interface InvalidRabbit { username: number; password: string; } type ValidateRabbit<Rabbit> = Assert< //assert that Rabbit is of type {username, password} Is.Type< User, { username: string; password: string; } >, //custom compile time exceptions "Trix are for kids. Provide a username and password.", User >; // Ha! Silly Rabbit... function checkRabbit<T>(rabbit: ValidateRabbit<T>) { // .... protect your trix } declare const rabbit1: ValidRabbit; declare const rabbit2: InvalidRabbit; checkRabbit(rabbit1); checkRabbit(rabbit2); /** ~~~~~~~~~ * └───── Type Exception! "...Provide a username and password" */
Pilihan di Milik Anda
Anda boleh terus hidup dalam ketakutan, menulis semakan masa jalan untuk segala-galanya, menganggap TypeScript seperti menaip pilihan untuk JavaScript.
Atau anda boleh menyertai kami pada 2024, di mana kami mempercayai pengkompil kami dan membiarkannya menjalankan tugasnya.
Ingat: Setiap kali anda menulis semakan jenis masa jalan, di suatu tempat pengkompil TypeScript menangis.
Kesimpulan
Byzantium bukan sekadar perpustakaan lain – ia adalah campur tangan untuk isu kepercayaan anda dengan jenis. Sudah tiba masanya untuk melepaskan pemeriksaan masa jalan dan menerima kuasa jaminan masa kompilasi.
CPU anda akan berterima kasih kepada anda. Pasukan DevOps anda akan berterima kasih kepada anda. Pengguna anda akan berterima kasih kepada anda (dengan tidak mencari pepijat berkaitan jenis).
Dan yang paling penting, anda akan berterima kasih kepada diri sendiri pada pukul 3 PG apabila anda tidur nyenyak dan bukannya menyahpepijat ralat jenis dalam pengeluaran.
P.S. Jika anda masih tidak yakin, cuba kira berapa banyak semakan jenis masa jalan yang anda ada dalam pangkalan kod anda. Kemudian darabkan itu dengan kadar setiap jam anda. Itulah berapa banyak masa yang anda luangkan untuk tidak mempercayai TypeScript.
P.P.S. Tiada jenis yang dicederakan dalam pembuatan catatan blog ini. Walaupun beberapa semakan masa jalan telah dihentikan secara kekal.
*P.P.P.S. Jika anda ingin menyumbang, singgah di Github saya dan klon repo. Semuanya masih segar, jadi banyak peluang untuk menyumbang.
Dokumen dan Pakej tersedia di JSR.io
Atas ialah kandungan terperinci Intervensi TypeScript: Memecahkan Ketagihan Semakan Masa Jalanan Anda dengan Byzantium. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

C dan C memainkan peranan penting dalam enjin JavaScript, terutamanya digunakan untuk melaksanakan jurubahasa dan penyusun JIT. 1) C digunakan untuk menghuraikan kod sumber JavaScript dan menghasilkan pokok sintaks abstrak. 2) C bertanggungjawab untuk menjana dan melaksanakan bytecode. 3) C melaksanakan pengkompil JIT, mengoptimumkan dan menyusun kod hot-spot semasa runtime, dan dengan ketara meningkatkan kecekapan pelaksanaan JavaScript.

JavaScript digunakan secara meluas di laman web, aplikasi mudah alih, aplikasi desktop dan pengaturcaraan sisi pelayan. 1) Dalam pembangunan laman web, JavaScript mengendalikan DOM bersama -sama dengan HTML dan CSS untuk mencapai kesan dinamik dan menyokong rangka kerja seperti JQuery dan React. 2) Melalui reaktnatif dan ionik, JavaScript digunakan untuk membangunkan aplikasi mudah alih rentas platform. 3) Rangka kerja elektron membolehkan JavaScript membina aplikasi desktop. 4) Node.js membolehkan JavaScript berjalan di sisi pelayan dan menyokong permintaan serentak yang tinggi.
