Saya baru-baru ini mulai menggunakan TypeScript dengan Expo. Saya telah melakukan semua integrasi linter / formatter seperti typescript-eslint
agar saya dapat menangkap sebagian besar kesalahan selama pengkodean. Untuk memeriksa apakah kode dikompilasi, saya jalankannpx tsc
sesekali dan memperbaikinya.
Satu hal yang belum sepenuhnya saya pahami adalah mengapa aplikasi saya berhasil dibangun walaupun ada banyak kesalahan kompilasi. Saya berharap (dan lebih suka) melihat kesalahan layar merah untuk setiap kesalahan kompilasi daripada membangun aplikasi dengan sukses dan saya mengetahuinya nanti. Sebagai contoh,
function square<T>(x: T): T {
console.log(x.length); // error TS2339: Property 'length' does not exist on type 'T'.
return x * x;
}
adalah kesalahan TypeScript khas yang (saya percaya?) dapat dengan mudah diperiksa pada waktu kompilasi. Saya ingin ini menghasilkan kesalahan layar merah besar dan build gagal.
Saya cukup baru untuk TypeScript sehingga mungkin saya kehilangan sesuatu yang sangat penting. Apa sebenarnya yang menyebabkan keringanan hukuman ini dan apakah ada cara untuk menegakkan pemeriksaan yang lebih ketat?
npx tsc
tetapi saya ingin mendapatkan layar merah untuk setiap kesalahan TypeScript seperti yang saya lakukan untuk kesalahan JS normal seperticonst n = 23; n.reverse();
yang menghasilkan layar merah dengan pesan "n.reverse bukan fungsi. (Dalam 'n.reverse ()', 'n.reverse' tidak terdefinisi) "Jawaban:
Hal pertama yang harus dipahami adalah bahwa TypeScript adalah superset dari Javascript, dan dalam hal ini sebenarnya tidak diperiksa jenisnya selama kompilasi.
Pada dasarnya apa yang terjadi adalah Babel menghapus Stripteks dan mengubahnya menjadi Javascript, yang kemudian dikompilasi ke dalam bundel js.
Anda dapat melihat pada baris pertama dari dokumen Babel berikut ini serta peringatan: https://babeljs.io/docs/en/next/babel-plugin-transform-typescript
Apa yang saya sarankan adalah memperluas perintah build Anda untuk pertama kali memasukkan
tsc
atau lebih tepatnya kompilasi naskah, dengannoEmit
set ke true di tsconfig Anda.Pembaruan : Saya menemukan contoh lain di mana ini berlaku baru-baru ini ketika menambahkan
jest
dantypescript
ke proyek. Di bagian bawah dokumen Jest mereka benar-benar menyatakan hal yang sama:https://jestjs.io/docs/en/getting-started#using-typescript
sumber