TypeScript obyekt tiplari va ixtiyoriy maydon

Oldingi darsda obyektlar massivi tipi uzun chiqqan edi: { name: string; score: number }[]. Xuddi shu shakl uch joyda kerak bo’lsa, uni uch marta yozishga to’g’ri keladi.

Yechim — shaklga nom berish.

type bilan shakl e’lon qilish

type User = {
  id: number;
  name: string;
};

const user: User = { id: 1, name: "Aziz" };
console.log(user.name);
Aziz

Endi User nomi tip sifatida istalgan joyda ishlatiladi: o’zgaruvchida, funksiya parametrida, massiv ichida.

Tip nomi PascalCase bilan yoziladi: User, OrderStatus, ProductCard. O’zgaruvchi nomi esa camelCase bo’lib qolaveradi.

Ortiqcha maydon o’tmaydi

TypeScript obyektda belgilanmagan maydon bo’lishiga ham e’tiroz bildiradi:

type User = { id: number; name: string };
const user: User = { id: 1, name: "Aziz", role: "admin" };
example.ts(2,43): error TS2353: Object literal may only specify known properties, and 'role' does not exist in type 'User'.

Bu qat’iylik foydali: u maydon nomidagi xatoni ushlaydi. nmae deb yozib qo’ysangiz, xato o’sha qatorda chiqadi.

Ixtiyoriy maydon — savol belgisi

Har foydalanuvchida email bo’lmasligi mumkin. Bunday maydon nomidan keyin ? qo’yiladi:

type User = {
  id: number;
  name: string;
  email?: string;
};

const first: User = { id: 1, name: "Aziz" };
const second: User = { id: 2, name: "Malika", email: "malika@example.uz" };

console.log(first.email);
undefined

email? yozuvi aslida email: string | undefined degani: maydon bo’lmasligi mumkin, bo’lsa matn bo’ladi.

readonly — o’zgarmas maydon

Ba’zi maydonlar yaratilgandan keyin o’zgarmasligi kerak. Foydalanuvchi id si shunday:

type User = {
  readonly id: number;
  name: string;
};

const user: User = { id: 1, name: "Aziz" };

user.name = "Aziz Karimov"; // ruxsat
user.id = 5;                // xato

Oxirgi qator:

example.ts(9,6): error TS2540: Cannot assign to 'id' because it is a read-only property.

const bilan farqini ajrating:

Yozuv Nimani himoya qiladi
const user = { ... } O’zgaruvchiga yangi obyekt berishni
readonly id: number Obyekt ichidagi maydonni o’zgartirishni

const obyekt ichini himoya qilmaydi — const bilan e’lon qilingan obyektning maydonini bemalol o’zgartirish mumkin. Ikkisi turli vazifani bajaradi.

Ichma-ich tuzilma

Tip ichida boshqa tip ishlatiladi:

type Address = {
  city: string;
  street: string;
};

type Customer = {
  name: string;
  address: Address;
};

const customer: Customer = {
  name: "Bobur",
  address: { city: "Toshkent", street: "Amir Temur" },
};

console.log(customer.address.city);
Toshkent

Har shaklga alohida nom berish odati foydali: Address tipi keyin boshqa joyda ham kerak bo’ladi.

Obyektlar massivi — endi qisqa

Oldingi darsdagi uzun yozuv shunday qisqaradi:

type Student = {
  name: string;
  score: number;
};

const students: Student[] = [
  { name: "Aziz", score: 85 },
  { name: "Malika", score: 52 },
  { name: "Bobur", score: 71 },
];

const passed = students.filter((student) => student.score >= 60);
console.log("O'tganlar soni:", passed.length);
console.log(passed.map((student) => student.name).join(", "));
O'tganlar soni: 2
Aziz, Bobur

filter va map ichidagi student parametriga tip yozilmadi. TypeScript uni massiv tipidan o’zi bildi va student. yozganingizda faqat name bilan score ni taklif qiladi. Massiv metodlari darsidagi kod shu tarzda xavfsizroq bo’ladi.

Amaliy mashq

  1. Book tipini e’lon qiling: title, author va year maydonlari bilan;
  2. Shu tipda obyekt yaratib, unga tipda yo’q maydon qo’shib ko’ring va TS2353 xatosini o’qing;
  3. year maydonini ixtiyoriy qiling va uni tekshirmasdan ishlatib TS18048 xatosini chaqiring;
  4. Shu kodni ?. yozuvi bilan tuzating;
  5. title maydonini readonly qilib, uni o’zgartirishga urinib ko’ring;
  6. Book[] massivini yaratib, filter bilan ma’lum yildan keyingi kitoblarni ajrating.

3 va 4-qadam juftligi eng muhimi: ixtiyoriy maydon undefined bo’lishini unutish — TypeScript’dagi eng ko’p uchraydigan xato.

Qisqacha xulosa

  • type kalit so’zi obyekt shakliga nom beradi; nom PascalCase bo’ladi.
  • Tip nomiga I prefiksi qo’shilmaydi — User, IUser emas.
  • Tipda belgilanmagan maydon obyektga tushmaydi (TS2353).
  • ? maydonni ixtiyoriy qiladi va uni undefined bo’lishi mumkin deb belgilaydi.
  • Ixtiyoriy maydon tekshirilmasdan ishlatilmaydiif yoki ?. kerak.
  • readonly maydonni o’zgartirishdan himoya qiladi; const esa faqat o’zgaruvchini himoya qiladi.

Keyingi darsda type va interface — ikki e’lon usuli va qaysi birini tanlash.

Bu dars foydali bo'ldimi?

marta ko'rildi