Type memberi tahu TypeScript jenis isi sebuah variabel atau parameter. Tiga yang paling sering dipakai: string untuk teks, number untuk angka, dan boolean untuk true atau false. Mirip kolom di formulir online: kolom nama menerima huruf, kolom umur cuma menerima angka, dan kotak centang cuma bisa dicentang atau gak.
🧪 Tebakan cepat:
let skor = 90;ditulis tanpa type annotation, lalu baris berikutnyaskor = "95";. TypeScript protes atau diam saja? Tebak dulu, jawabannya ada di bagian "Inference: TypeScript menebak type".
Tiga type dasar
let nama: string = "Budi";
let skor: number = 90;
let lulus: boolean = true;
stringuntuk teks apa pun di dalam tanda kutip:"Budi",'Budi', atau template literal`Budi`.numberuntuk semua angka, bulat maupun desimal:90,3.14,-5. Gak ada type terpisah untuk bilangan bulat.booleancuma punya dua nilai:truedanfalse, tanpa tanda kutip.
Inference: TypeScript menebak type
let skor = 90;
skor = "95";
Gak ada type annotation, tapi baris kedua tetap ditolak:
Type 'string' is not assignable to type 'number'. ts(2322)
Itu jawaban tebakannya. Kalau variabel langsung diberi isi waktu dibuat, TypeScript menebak type-nya dari isi itu. Ini disebut inference. Arahkan mouse ke skor di VS Code, muncul let skor: number. Jadi type annotation di variabel boleh dilewati kalau isinya sudah jelas.
Ini yang TypeScript katakan untuk beberapa kombinasi, sama persis dengan yang bisa kamu coba di Lab:
| Baris 1 | Baris 2 | Kata TypeScript |
|---|---|---|
let skor = 90; |
skor = 95; |
gak ada error |
let skor = 90; |
skor = "95"; |
Type 'string' is not assignable to type 'number'. |
let skor: number = 90; |
skor = true; |
Type 'boolean' is not assignable to type 'number'. |
let skor: any = 90; |
skor = "95"; |
gak ada error |
Parameter function beda: TypeScript gak bisa menebak apa yang nanti dikirim pemanggilnya. Tanpa type, dia protes Parameter 'nama' implicitly has an 'any' type. ts(7006). Jadi parameter selalu diberi type.
Type di parameter dan return function
function sapa(nama: string): string {
return "Halo, " + nama + "!";
}
console.log(sapa("Budi")); // Halo, Budi!
console.log(sapa("Ani")); // Halo, Ani!
nama: string: parameternamaharus berisi teks.): stringsesudah kurung tutup adalah return type: janji bahwa function ini mengembalikan teks."Halo, " + nama + "!"menyambung tiga teks. Template literal`Halo, ${nama}!`hasilnya sama.sapa(17)ditolak:Argument of type 'number' is not assignable to parameter of type 'string'. ts(2345).
Janji return type ditagih. Kalau badan function-nya masih kosong, atau isinya cuma console.log, TypeScript protes:
A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value. ts(2355)
Artinya: type yang dijanjikan bukan undefined, void, atau any, jadi function ini wajib return sebuah nilai.
any dan unknown
any dan unknown sama-sama menerima semua jenis isi. Bedanya ada di apa yang boleh kamu lakukan sesudahnya. Pakai kode ini, dengan toFixed(1), method angka yang menulis angka dengan satu angka di belakang koma (95 jadi "95.0"):
let skor: any = 90;
skor = "95";
console.log(skor.toFixed(1));
- Dengan
any, TypeScript diam saja. Waktu jalan baru meledak:TypeError: skor.toFixed is not a function, karena teks gak punyatoFixed.anymematikan pengecekan, jadi hindari. - Ganti
anyjadiunknown, dan TypeScript menolak baris ketiga sebelum jalan:'skor' is of type 'unknown'. ts(18046). Isinya harus dipastikan dulu:
let skor: unknown = 90;
skor = "95";
if (typeof skor === "number") {
console.log(skor.toFixed(1));
}
Di dalam if, TypeScript tahu skor pasti angka. Cara memastikan seperti ini dibahas lebih dalam di materi Type Narrowing.
null, undefined, dan void
undefinedartinya belum ada isi,nullartinya sengaja dikosongkan. Dengan modestrict(bawaan TypeScript sekarang, dibahas di materi tsconfig),let nama: string = null;ditolak:Type 'null' is not assignable to type 'string'. ts(2322). Cara mengizinkan "teks atau null" dibahas di materi Union & Literal.voiddipakai sebagai return type function yang gak mengembalikan apa-apa:
function catat(pesan: string): void {
console.log(pesan);
}
⚠️ Jebakan yang sering ketemu
- Lupa
return. Kode awal latihan masih kosong, jadisapamengembalikanundefineddan TypeScript protests(2355).console.loggak sama denganreturn: yang dinilai adalah nilai yang dikembalikan. - Kalimat ditulis tetap.
return "Halo, Budi!";cocok untuk Budi, tapisapa("Ani")juga diuji dan harus menghasilkan"Halo, Ani!". Pakai parameternama. - Koma, spasi, dan tanda seru. Hasilnya harus persis
Halo, Budi!: koma dan spasi sesudahHalo, tanda seru di akhir. - Pakai
anysupaya error hilang. Error-nya cuma disembunyikan, bug-nya tetap ada dan muncul waktu jalan. Kalau type-nya belum jelas, pakaiunknownlalu cek dengantypeof.
TL;DR: string untuk teks, number untuk semua angka, boolean untuk true/false. Variabel yang langsung diberi isi gak wajib diberi type annotation, karena TypeScript menebaknya (inference): let skor = 90 sudah number. Parameter selalu diberi type, dan return type ditulis sesudah kurung: function sapa(nama: string): string { return "Halo, " + nama + "!"; }. Return type selain void wajib dipenuhi dengan return. any mematikan pengecekan, unknown menerima apa pun tapi harus dicek dulu sebelum dipakai. void untuk function tanpa nilai kembali.