Object Types — TypeScript

Kamu bisa menentukan bentuk object dengan type annotation: let user: { nama: string; umur: number } = { nama: "Budi", umur: 17 }; Optional properties dengan…

Object type menulis bentuk sebuah object: property apa saja yang harus ada, dan type isi masing-masing. Bayangin formulir pendaftaran. Ada kolom wajib, ada kolom yang ditandai "opsional", dan ada kolom yang terkunci setelah diisi. Object type adalah formulir kosongnya, dan object adalah formulir yang sudah diisi: TypeScript mengecek isiannya cocok dengan formulir itu.

🧪 Tebakan cepat: type-nya minta nama dan umur. Object { nama: "Budi", umur: 17, hobi: "futsal" } punya keduanya, plus satu property lagi. Diterima atau ditolak? Tebak dulu, jawabannya ada di bagian "Isi yang kurang, salah, atau lebih".

Menulis bentuk object

let user: { nama: string; umur: number } = { nama: "Budi", umur: 17 };

console.log(user.nama); // Budi

Isi yang kurang, salah, atau lebih

Ini kata TypeScript untuk empat object di bawah type { nama: string; umur: number }, sama seperti di Lab:

Object Kata TypeScript
{ nama: "Budi", umur: 17 } gak ada error
{ nama: "Budi", umur: "17" } Type 'string' is not assignable to type 'number'. ts(2322)
{ nama: "Budi" } Property 'umur' is missing in type '{ nama: string; }' but required in type '{ nama: string; umur: number; }'. ts(2741)
{ nama: "Budi", umur: 17, hobi: "futsal" } Object literal may only specify known properties, and 'hobi' does not exist in type '{ nama: string; umur: number; }'. ts(2353)

Property opsional dengan ?

let user: { nama: string; umur?: number } = { nama: "Budi" };

console.log(user.umur); // undefined

readonly: terkunci setelah diisi

let user: { readonly nama: string; umur: number } = { nama: "Budi", umur: 17 };

user.umur = 18;    // boleh
user.nama = "Ani";

⚠️ Jebakan yang sering ketemu

TL;DR: Object type ditulis { nama: string; umur: number } sesudah titik dua, lalu object-nya { nama: "Budi", umur: 17 } sesudah =. Property yang salah type (ts(2322)), kurang (ts(2741)), atau lebih (ts(2353)) ditolak. umur?: number membuat property opsional, dan type-nya jadi number | undefined, jadi cek dulu sebelum dipakai. readonly nama: string melarang nama diganti (ts(2540)). Semua aturan ini cuma dicek sebelum jalan.

Yang akan kamu pelajari