Tutorial Konfigurasi tsconfig.json untuk Pemula
Pendahuluan
Pernahkah kamu membuka proyek TypeScript dan menemukan file bernama tsconf[7D[K tsconfig.json` di root direktori, lalu bertanya-tanya, “File ini buat apa[3D[K
apa sih?” Kamu tidak sendirian. Banyak developer pemula yang langsung meng[4D[K
mengabaikan file ini dan hanya berharap semuanya berjalan dengan sendirinya[10D[K
sendirinya.
Bayangkan tsconfig.json seperti pengaturan mesin pabrik. Kalau kamu p[1D[K
punya pabrik roti, kamu bisa atur suhu oven, lama pemanggangan, dan jenis t[1D[K
tepung yang dipakai. Nah, tsconfig.json adalah panel kontrol yang memberi[7D[K
memberitahu kompiler TypeScript: “Hei, kompilasi kode ini dengan aturan se[2D[K
seperti ini.”
Tanpa konfigurasi yang tepat, TypeScript mungkin terlalu ketat sehingga mem[3D[K
membuat kamu frustrasi, atau terlalu longgar sehingga manfaat utamanya — ke[2D[K
keamanan tipe — tidak terasa. Artikel ini akan memandu kamu memahami dan me[2D[K
mengkonfigurasi tsconfig.json dari nol dengan bahasa yang mudah dipahami.[9D[K
dipahami.
Sebelum lanjut, pastikan kamu sudah mengenal dasar TypeScript. Kalau belum,[6D[K belum, baca dulu artikel [Belajar JavaScript dari Nol: Panduan Pemula untuk[5D[K untuk Web Developer](/docs/sw/javascript/belajar-javascript-dari-nol-pandua[65DK Developer un[2D[K untuk membangun fondasi JavaScript-mu terlebih dahulu, karena TypeScript ad[2D[K adalah superset-nya.
Konsep Dasar
Apa Itu tsconfig.json?
tsconfig.json adalah file konfigurasi untuk **TypeScript Compiler (tsc)[7D[K
(tsc). File ini ditulis dalam format JSON dan berada di root direktori pr[2D[K
proyekmu. Ketika kamu menjalankan perintah tsc, kompiler akan otomatis me[2D[K
mencari file ini untuk mengetahui bagaimana cara mengompilasi kode TypeScri[8D[K
TypeScript-mu menjadi JavaScript.
Untuk membuat file ini dari awal, jalankan:
# Membuat folder proyek TypeScript sederhana
mkdir -p belajar-typescript
cd belajar-typescript
# Membuat file package.json secara otomatis
npm init -y > /dev/null
# Menginstal TypeScript sebagai dependency pengembangan
npm install --save-dev typescript > /dev/null
# Membuat file konfigurasi TypeScript: tsconfig.json
npx tsc --init > /dev/null
# Menampilkan pesan jika konfigurasi berhasil dibuat
echo "tsconfig.json berhasil dibuat"
# Output yang diharapkan:
# > tsconfig.json berhasil dibuat
Perintah ini akan menghasilkan file tsconfig.json dengan banyak opsi yang[4D[K
yang sudah dikomentari. Hasilnya seperti buku panduan lengkap — kebanyakan [K
dikomentari, tapi semuanya tersedia kalau kamu butuh.
Struktur Dasar tsconfig.json
Secara garis besar, tsconfig.json punya dua bagian utama:
{
// Pengaturan utama untuk kompiler TypeScript
"compilerOptions": {
// Mengubah TypeScript menjadi JavaScript versi ES2020
"target": "ES2020",
// Menggunakan format module yang umum dipakai di Node.js
"module": "CommonJS",
// Folder hasil kompilasi JavaScript
"outDir": "dist",
// Folder sumber file TypeScript
"rootDir": "src",
// Mengaktifkan pengecekan tipe yang lebih ketat
"strict": true
},
// File TypeScript yang akan dikompilasi
"include": ["src/**/*.ts"],
// Folder yang tidak ikut dikompilasi
"exclude": ["node_modules", "dist"]
// Output yang diharapkan:
// > File TypeScript dari folder src berhasil dikompilasi
// > File JavaScript hasil kompilasi tersimpan di folder dist
}
compilerOptions: Tempat semua pengaturan kompiler berada — ini bagi[4D[K bagian terpenting.include: Daftar folder/file yang dimasukkan dalam proses kompil[6D[K kompilasi.exclude: Daftar folder/file yang dikecualikan.
Opsi-Opsi Penting di compilerOptions
Mari kita bahas satu per satu opsi yang paling sering digunakan:
1. target — Output JavaScript Versi Berapa?
{
"// komentar": "File tsconfig.json mengatur cara TypeScript dikompilasi."[13D[K
dikompilasi.",
"compilerOptions": {
"target": "ES2020"
},
"// Output yang diharapkan:": "",
"// > TypeScript akan dikompilasi ke JavaScript versi ES2020.": "",
"// > Konfigurasi ini siap digunakan dengan perintah tsc.": ""
}
Opsi ini menentukan versi JavaScript yang dihasilkan. Analoginya seperti **[2D[K
format file video — kamu punya video 4K tapi perlu mengekspornya ke for[3D[K
format yang kompatibel dengan TV lama. Kalau proyekmu harus berjalan di bro[3D[K
browser lama, pilih ES5 atau ES6. Untuk proyek modern, ES2020 atau E[2D[K ESNext` sudah aman.
Nilai yang umum digunakan:
ES5— Kompatibel dengan hampir semua browser lamaES6/ES2015— Modern, mendukungclass,arrow function,let/co[9D[Klet/const`ES2020— Mendukungoptional chaining (?.),nullish coalescing (??)ESNext— Versi JavaScript terbaru yang tersedia
2. module — Sistem Modul yang Digunakan
{
"// komentar": "Konfigurasi dasar TypeScript untuk proyek pemula",
"compilerOptions": {
"// komentar module": "Menggunakan CommonJS agar hasil JavaScript bisa [K
dijalankan dengan Node.js",
"module": "CommonJS",
"// komentar target": "Mengubah TypeScript menjadi JavaScript versi ES2[3D[K
ES2020",
"target": "ES2020",
"// komentar outDir": "Folder tempat hasil kompilasi disimpan",
"outDir": "./dist",
"// komentar strict": "Membantu menemukan error tipe data sejak awal",
"strict": true
},
"// Output yang diharapkan": [
"> TypeScript berhasil dikompilasi",
"> File JavaScript tersimpan di folder dist"
]
}
Opsi ini mengatur bagaimana TypeScript menghasilkan kode untuk import/ex[12D[K import/export`.
CommonJS— Untuk Node.js (require()/module.exports)ESModule/ES2020— Untuk browser modern atau bundler seperti Vite/We[7D[K Vite/WebpackNodeNext— Untuk Node.js versi terbaru dengan dukungan ESM native
3. strict — Mode Ketat
{
"// komentar": "File tsconfig.json untuk mengatur kompilasi TypeScript",
"compilerOptions": {
"// komentar strict": "true membuat TypeScript memeriksa tipe data lebi[4D[K
lebih ketat",
"strict": true
},
"// Output yang diharapkan:": [
"> TypeScript strict mode aktif",
"> Kesalahan tipe akan lebih mudah ditemukan"
]
}
Ini adalah tombol super penting. Ketika strict: true, TypeScript meng[4D[K
mengaktifkan serangkaian pemeriksaan ketat sekaligus:
strictNullChecks— Tidak boleh assignnull/undefinedke tipe lain t[1D[K tanpa izinnoImplicitAny— Tidak boleh ada tipeanyyang tidak dideklarasikan se[2D[K secara eksplisitstrictFunctionTypes— Memeriksa tipe parameter fungsi secara lebih keta[4D[K ketat
Untuk pemula, mengaktifkan strict: true memang bisa terasa menyiksa di aw[2D[K
awal, tapi ini yang membuat TypeScript benar-benar berguna. Anggap saja sep[3D[K
seperti sabuk pengaman — ribet dipasang, tapi sangat melindungi.
4. outDir dan rootDir — Atur Struktur Folder
{
"// komentar": "Simpan sebagai tsconfig.json di root project.",
"compilerOptions": {
"rootDir": "./src",
"outDir": "./dist",
"target": "ES2020",
"module": "CommonJS",
"strict": true
},
"include": ["src/**/*"],
"// Output yang diharapkan:": "",
"// > File TypeScript dari folder src akan dikompilasi": "",
"// > Hasil JavaScript akan tersimpan di folder dist": ""
}
rootDir: Di mana file TypeScript sumber beradaoutDir: Di mana file JavaScript hasil kompilasi disimpan
Dengan konfigurasi ini, TypeScript akan membaca semua .ts dari folder sr[3D[K src/dan menghasilkan file.jske folderdist/` dengan struktur folder[6D[K
folder yang sama.
5. lib — Library Bawaan yang Tersedia
{
"$comment": "# tsconfig.json ini mengatur cara TypeScript dikompilasi",
"compilerOptions": {
"target": "ES2020",
"lib": ["ES2020", "DOM"],
"strict": true,
"outDir": "dist"
},
"include": ["src/**/*.ts"],
"$output": [
"# Output yang diharapkan:",
"# > TypeScript berhasil dikompilasi",
"# > File JavaScript tersimpan di folder dist"
]
}
Opsi ini memberitahu TypeScript library mana yang tersedia di lingkungan ru[2D[K
runtime-mu. DOM dibutuhkan kalau kamu mengakses document, window, ata[3D[K
atau API browser lainnya. Kalau kamu hanya membuat aplikasi Node.js, DOM [K
tidak perlu dimasukkan.
6. paths — Alias Import
{
"// komentar": "Simpan konfigurasi ini sebagai tsconfig.json agar TypeScr[7D[K
TypeScript mengenali alias import.",
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@components/*": ["src/components/*"],
"@utils/*": ["src/utils/*"]
}
},
"// Output yang diharapkan:": "",
"// > import Button from '@components/Button' dapat dikenali oleh TypeScr[7D[K
TypeScript": "",
"// > import formatDate from '@utils/formatDate' dapat dikenali oleh Type[4D[K
TypeScript": ""
}
Opsi ini memungkinkan kamu membuat alias untuk path import yang panjang. Da[2D[K
Daripada menulis import Button from '../../../components/Button', kamu bi[2D[K
bisa tulis import Button from '@components/Button'. Jauh lebih rapi!
Contoh Kode
Konfigurasi untuk Proyek Node.js
Ini adalah konfigurasi yang cocok untuk membuat REST API atau script backen[6D[K backend dengan Node.js:
{
"// komentar": "File tsconfig.json untuk mengatur cara TypeScript dikompi[7D[K
dikompilasi",
"compilerOptions": {
"// target": "Mengubah TypeScript menjadi JavaScript versi ES2020",
"target": "ES2020",
"// module": "Menggunakan format module CommonJS, cocok untuk Node.js p[1D[K
pemula",
"module": "CommonJS",
"// lib": "Menggunakan fitur bawaan JavaScript ES2020",
"lib": ["ES2020"],
"// rootDir": "Folder tempat file TypeScript ditulis",
"rootDir": "./src",
"// outDir": "Folder tempat hasil kompilasi disimpan",
"outDir": "./dist",
"// strict": "Mengaktifkan pengecekan ketat tipe data",
"strict": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}
Konfigurasi untuk Proyek Frontend React
Ini adalah konfigurasi yang cocok untuk membuat aplikasi frontend dengan Re[2D[K React:
{
"// komentar": "File tsconfig.json untuk mengatur cara TypeScript dikompi[7D[K
dikompilasi",
"compilerOptions": {
"// target": "Mengubah TypeScript menjadi JavaScript versi ES2018",
"target": "ES2018",
"// module": "Menggunakan format module ESNext, cocok untuk bundler sep[3D[K
seperti Webpack atau Vite",
"module": "ESNext",
"// lib": "Menggunakan fitur bawaan JavaScript ES6 dan DOM",
"lib": ["ES6", "DOM"],
"// rootDir": "Folder tempat file TypeScript ditulis",
"rootDir": "./src",
"// outDir": "Folder tempat hasil kompilasi disimpan",
"outDir": "./dist",
"// strict": "Mengaktifkan pengecekan ketat tipe data",
"strict": true,
"// jsx": "Menyatakan bahwa kita akan menggunakan JSX",
"jsx": "react"
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}
Pertanyaan yang Sering Diajukan
Apa itu tsconfig.json dan apakah wajib ada?
tsconfig.json adalah file konfigurasi yang memberitahu kompiler TypeScrip[9D[K
TypeScript bagaimana cara mengompilasi proyekmu. Secara teknis tidak wajib [K
— kamu bisa mengoper opsi langsung ke perintah tsc — tapi untuk proyek ny[2D[K
nyata, file ini sangat direkomendasikan. Tanpanya, kamu harus mengetik ulan[4D[K
ulang semua opsi setiap kali menjalankan kompiler, yang tidak praktis sama [K
sekali.
Apa perbedaan module: "CommonJS" dan module: "ESNext"?
CommonJS menggunakan sintaks require() dan module.exports, yang merup[5D[K
merupakan standar lama Node.js. ESNext menggunakan sintaks import/expo[14D[K import/exportmodern yang merupakan standar ECMAScript resmi. Untuk pro[3D[K proyek Node.js tanpa bundler, gunakanCommonJS. Untuk proyek frontend den[3D[K dengan Vite/Webpack, atau Node.js versi baru dengan flag —experimental-vm[18D[K
--experimental-vm-modules, gunakan ESNext atau NodeNext.
Mengapa strict: true penting dan apakah bisa dimatikan?
strict: true mengaktifkan serangkaian pemeriksaan ketat yang mencegah ban[3D[K
banyak bug umum, terutama yang berkaitan dengan null/undefined dan tipe[4D[K
tipe implisit any. Kamu bisa mematikannya ("strict": false), tapi itu m[1D[K
mengurangi manfaat utama TypeScript secara signifikan. Untuk pemula, disara[6D[K
disarankan tetap aktifkan dan pelajari setiap pesan error — karena TypeScri[8D[K
TypeScript sedang membantumu menulis kode yang lebih aman.
Bagaimana cara membuat tsconfig.json dari awal?
Cukup jalankan npx tsc --init di root direktori proyekmu. Perintah ini ak[2D[K
akan otomatis membuat file tsconfig.json dengan ratusan opsi yang sudah d[1D[K
dikomentari beserta penjelasannya. Kamu cukup uncomment dan ubah opsi yang [K
kamu butuhkan. Alternatif lain, kamu bisa copy-paste template dari dokument[8D[K
dokumentasi resmi TypeScript sesuai jenis proyekmu.
Apa yang dimaksud dengan include dan exclude di tsconfig.json?
include menentukan file atau folder mana yang diproses oleh TypeScrip[9D[K
TypeScript — biasanya ["src/**/*"] untuk memproses semua file di dalam fo[2D[K
folder src. exclude adalah kebalikannya, menentukan file yang **dilewat[9D[K
dilewati — node_modules dan dist selalu dieksklusi agar TypeScript [K
tidak memproses library pihak ketiga atau file hasil kompilasi sebelumnya.
Kesimpulan
tsconfig.json adalah jantung dari setiap proyek TypeScript. Dengan memaha[6D[K
memahami opsi-opsi utamanya — target, module, strict, outDir, dan [1D[K rootDir` — kamu sudah mampu mengkonfigurasi TypeScript untuk berbagai jeni[4D[K
jenis proyek, baik itu backend Node.js maupun frontend React.
Ingat prinsip dasarnya: mulai dengan strict: true meski awalnya terasa be[2D[K
berat, sesuaikan target dan module dengan lingkungan runtime proyekmu, [K
dan manfaatkan paths untuk membuat kode lebih bersih. Seiring bertambahny[11D[K
bertambahnya pengalaman, kamu akan semakin nyaman memodifikasi konfigurasi [K
ini sesuai kebutuhan spesifik proyekmu.
Selamat belajar dan terus eksplorasi! Kalau kamu sudah nyaman dengan tscon[6D[K tsconfig.json`, coba terapkan di proyek nyata dan rasakan sendiri bagaiman[8D[K
bagaimana TypeScript membuatmu lebih percaya diri dalam menulis kode. Janga[5D[K
Jangan ragu untuk menjelajahi artikel-artikel lain di KamusNgoding untuk me[2D[K
memperdalam pemahamanmu.