TypeScript dan tsconfig.json
Artikel ini menjelaskan tentang TypeScript dan tsconfig.json.
Dimulai dari peran dasar TypeScript, kami akan menjelaskan dengan contoh spesifik bagaimana tsconfig.json berfungsi dalam sebuah proyek.
YouTube Video
TypeScript dan tsconfig.json
TypeScript adalah 'JavaScript dengan tipe data.'. Namun, untuk memanfaatkan TypeScript secara efektif dalam proyek nyata, sangat penting untuk memahami tsconfig.json dengan benar dan mengonfigurasinya secara sengaja.
Mengapa kita membutuhkan TypeScript?
Pertama, alasan utama menggunakan TypeScript adalah 'kemampuan untuk menemukan kesalahan sebelum kode dijalankan.'.
1function add(a: number, b: number): number {
2 return a + b;
3}
4
5add(1, "2");Kode ini tidak akan menyebabkan error di JavaScript sampai saat dijalankan, tetapi di TypeScript akan menghasilkan error tipe pada saat kompilasi.
Deteksi dini ini sangat meningkatkan efisiensi dan kualitas pengembangan.
Bagaimana cara menjalankan TypeScript?
Pada prinsipnya, TypeScript tidak dapat dijalankan secara langsung. Anda perlu mengubahnya menjadi JavaScript menggunakan tsc (TypeScript Compiler)..
1npm install -D typescript
2npx tsc --init- Dengan melakukan operasi ini,
tsconfig.jsonakan dibuat, menyediakan berkas utama yang mendefinisikan perilaku proyek TypeScript.
Apa peran tsconfig.json?
tsconfig.json adalah file konfigurasi yang menentukan 'file apa saja,' 'dengan aturan apa,' dan 'bagaimana cara mengonversinya.'. Meskipun awalnya tampak rumit, hanya beberapa pengaturan yang benar-benar penting.
1{
2 "compilerOptions": {
3 "target": "ES2020",
4 "module": "ESNext",
5 "strict": true
6 }
7}- Dengan hanya pengaturan ini, pengembangan TypeScript yang modern dan aman bisa dilakukan.
target: Versi JavaScript yang akan dihasilkan
target menentukan tingkat spesifikasi dari JavaScript output.
1"target": "ES2020"Dengan ini, TypeScript akan menghasilkan JavaScript setara dengan ES2020. Untuk lingkungan lama, pilih ES5; jika hanya untuk lingkungan terbaru, pilih ES2022, dll.
Saat memilih ESNext
1"target": "ESNext"-
ESNextmenentukan untuk menghasilkan sintaks JavaScript terbaru yang tersedia sebagaimana adanya. TypeScript tidak mentranspilasi sintaksnya, dan menyerahkannya kepada lingkungan runtime seperti Node.js atau browser untuk menanganinya. -
Oleh karena itu,
ESNextcocok digunakan jika targetnya hanyalah Node.js terbaru atau jika Anda menggunakan Babel atau bundler untuk transpile secara terpisah. Di sisi lain, jika lingkungan runtime tidak mendukung sintaks terbaru, ini dapat menyebabkan error saat dijalankan, jadi perlu berhati-hati.
module: Menentukan format modul
module menentukan format modul.
1"module": "ESNext"ESNextadalah standar di lingkungan frontend dan Node.js modern.- Pilih
"CommonJS"hanya jika Anda membutuhkan CommonJS.
strict: Memaksimalkan keamanan tipe
strict adalah tombol untuk memaksimalkan keamanan TypeScript.
1"strict": true- Mengaktifkan ini akan mendeteksi tipe ambigu dan potensi bug secara menyeluruh.
mode strict dan implicit any
Ketika Anda mengaktifkan strict, TypeScript menganggap variabel yang tipenya tidak dapat disimpulkan sebagai error.
1function printValue(value) {
2 console.log(value);
3}- Variabel
valueini tidak memiliki informasi tipe saat deklarasi, sehingga TypeScript tidak dapat menentukan tipenya. Akibatnya,anydigunakan secara implisit, yang akan menimbulkan peringatan (error) dalam modestrict.
1function printValue(value: number) {
2 console.log(value);
3}- Dengan secara eksplisit menentukan tipenya seperti ini, TypeScript dapat memahami bahwa 'variabel ini hanya menangani angka.'. Di TypeScript, yang lebih penting adalah tipenya dapat ditentukan secara unik daripada tipenya bisa dihilangkan.
include/exclude: Mengatur file mana yang akan dikompilasi
Di tsconfig.json, Anda dapat menentukan file mana yang akan dimasukkan dan file mana yang akan dikecualikan dari kompilasi.
1{
2 "include": ["src"],
3 "exclude": ["node_modules"]
4}- Dengan ini, hanya file di bawah
srcyang akan dikelola oleh TypeScript. node_modulesyang ditentukan diexcludeakan dikecualikan dari kompilasi meskipun berada di dalam path yang sudah didaftarkan diinclude.
outDir: Menentukan direktori output
Tentukan outDir untuk mengatur lokasi output build Anda.
1"outDir": "dist"- Dengan ini, semua hasil kompilasi akan ditempatkan ke folder
dist. Dalam praktiknya, memisahkan kode sumber dari hasil build adalah hal yang umum.
rootDir: Menentukan direktori sumber
rootDir menentukan direktori yang dianggap TypeScript sebagai akar dari kode sumber.
1"rootDir": "src"-
Pengaturan ini memungkinkan TypeScript mempertahankan struktur direktori berdasarkan
srcsaat menghasilkan file. Sebagai contoh,src/index.tsakan menjadidist/index.js. -
Struktur direktori yang ditentukan di
rootDirakan disalin keoutDir.
esModuleInterop: Menjembatani CommonJS dan ES Modules
Selanjutnya, mari kita lihat esModuleInterop.
1"esModuleInterop": true- Jika diaktifkan, Anda dapat menggunakan modul CommonJS dengan sintaks
importsecara aman.
1import fs from "fs";- Pengaturan ini hampir wajib jika menggunakan Node.js.
noImplicitAny: Melarang penggunaan 'any' secara implisit
Memperkuat pemeriksaan tipe pada tsconfig.json juga penting.
1"noImplicitAny": true- Dengan ini, Anda bisa melarang penggunaan tipe
anysecara implisit. Ini memungkinkan Anda untuk mendeteksi dengan pasti tempat Anda lupa menentukan tipe.
Konfigurasi untuk mendeteksi kode yang tidak terpakai
Pengaturan untuk mendeteksi kode tidak terpakai juga bermanfaat untuk meningkatkan kemudahan pemeliharaan.
1"noUnusedLocals": true,
2"noUnusedParameters": true- Dengan ini, variabel dan argumen yang tidak diperlukan akan langsung ditandai dengan peringatan.
lib: Mendefinisikan API bawaan yang tersedia untuk digunakan
lib adalah pengaturan yang menentukan API standar yang dianggap ada oleh TypeScript.
1"lib": ["ES2020", "DOM"]- Dengan pengaturan ini, tipe-tipe berikut menjadi tersedia:.
Dengan
ES2020, fitur-fitur modern sepertiPromise,Map, danSetmenjadi tersedia. DenganDOM, API browser sepertidocument,window, danHTMLElementmenjadi tersedia.
Pada frontend, sertakan DOM; untuk proyek khusus Node.js, hapus DOM untuk mencegah tipe global yang tidak diperlukan masuk.
moduleResolution: Aturan pencarian modul
moduleResolution menentukan bagaimana modul yang dijelaskan pada pernyataan import akan diresolusikan.
1"moduleResolution": "Node"Dua opsi utama adalah sebagai berikut:.
- Jika Anda memilih
Node, aturan resolusi modul Node.js yang digunakan. Classicadalah metode lama khusus TypeScript, namun sekarang jarang digunakan.
Dalam lingkungan yang menggunakan Node.js atau bundler, aman untuk secara eksplisit memilih Node.
tsconfig.json minimal yang siap digunakan di produksi
Berdasarkan apa yang telah kita bahas sejauh ini, tsconfig.json minimal yang siap produksi akan terlihat seperti ini:.
1{
2 "compilerOptions": {
3 "target": "ES2020",
4 "module": "ESNext",
5 "moduleResolution": "Node",
6 "lib": ["ES2020", "DOM"],
7 "strict": true,
8 "rootDir": "src",
9 "outDir": "dist",
10 "esModuleInterop": true,
11 "noImplicitAny": true,
12 "noUnusedLocals": true,
13 "noUnusedParameters": true
14 },
15 "include": ["src"]
16}Konfigurasi ini memberikan fondasi yang aman untuk proyek frontend maupun Node.js.
Ringkasan: tsconfig.json adalah 'buku aturan'
tsconfig.json bukan hanya file konfigurasi, tetapi juga 'buku aturan' untuk seluruh proyek. Dengan tsconfig.json, kebijakan penting seperti berikut didefinisikan secara jelas:.
- Tingkat keamanan tipe.
- Konvensi penulisan kode untuk tim Anda.
- Pencegahan bug di masa mendatang.
Dengan memahami tsconfig.json, Anda dapat tidak hanya menulis TypeScript, tapi juga merancang proyek agar penggunaan TypeScript tetap aman.
Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.