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
Booktipini e’lon qiling:title,authorvayearmaydonlari bilan;- Shu tipda obyekt yaratib, unga tipda yo’q maydon qo’shib ko’ring va
TS2353xatosini o’qing; yearmaydonini ixtiyoriy qiling va uni tekshirmasdan ishlatibTS18048xatosini chaqiring;- Shu kodni
?.yozuvi bilan tuzating; titlemaydoninireadonlyqilib, uni o’zgartirishga urinib ko’ring;Book[]massivini yaratib,filterbilan 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
typekalit so’zi obyekt shakliga nom beradi; nomPascalCasebo’ladi.- Tip nomiga
Iprefiksi qo’shilmaydi —User,IUseremas. - Tipda belgilanmagan maydon obyektga tushmaydi (
TS2353). ?maydonni ixtiyoriy qiladi va uniundefinedbo’lishi mumkin deb belgilaydi.- Ixtiyoriy maydon tekshirilmasdan ishlatilmaydi —
ifyoki?.kerak. readonlymaydonni o’zgartirishdan himoya qiladi;constesa faqat o’zgaruvchini himoya qiladi.
Keyingi darsda type va interface — ikki e’lon usuli va qaysi birini tanlash.