Interface — asoslar, sintaksis, ob'ekt shakli
Foydalanuvchi ob'ekti bir necha joyda ishlatiladi:
function salomlash(user: { ism: string; yosh: number; email: string }) { ... }
function saqlash(user: { ism: string; yosh: number; email: string }) { ... }
function yangilash(user: { ism: string; yosh: number; email: string }) { ... }
Bir xil tuzilma uch joyda takrorlanmoqda. email ga ? qo'shish kerak bo'lsa — uchala joyni o'zgartirish kerak. Interface bu muammoni hal qiladi: tuzilmaga bir marta nom berib, istalgan joyda ishlatiladi.
Interface nima?
Ob'ektning shakli — qanday xususiyatlar bo'lishi kerak. Bir marta e'lon qilinadi, istalgancha joyda ishlatiladi.
interface Foydalanuvchi {
ism: string;
yosh: number;
email: string;
}
Endi uchta funksiya ham shu nomdan:
function salomlash(user: Foydalanuvchi): string {
return `Salom, ${user.ism}!`;
}
function saqlash(user: Foydalanuvchi): void { ... }
function yangilash(user: Foydalanuvchi): void { ... }
email o'zgarsa — faqat Foydalanuvchi interface o'zgaradi.
Ob'ekt interfacega mos kelishi
Interface ob'ektning majburiy shakli — barcha xususiyatlar bo'lishi shart:
const user: Foydalanuvchi = {
ism: "Jasur",
yosh: 25,
email: "jasur@mail.com",
}; // ✅
const user: Foydalanuvchi = {
ism: "Jasur",
yosh: 25,
// ❌ email yetishmayapti
};
Muharrirda user. yozganda TypeScript avtomatik taklif qiladi:
user.
├── ism : string
├── yosh : number
└── email : string
Metod e'lon qilish
Interface ichida metodlar ham belgilanishi mumkin:
interface Hisoblash {
qoshish(a: number, b: number): number;
ayirish(a: number, b: number): number;
}
const kalkulyator: Hisoblash = {
qoshish(a, b) { return a + b; },
ayirish(a, b) { return a - b; },
};
TypeScript kalkulyator ning ikkala metodi ham mavjudligini va to'g'ri turlarini tekshiradi.
Class implements
Interface classlar uchun shartnoma vazifasini bajaradi:
interface Hayvon {
ism: string;
ovoz(): string;
}
class It implements Hayvon {
ism = "Baxter";
ovoz() { return "Vov!"; }
}
class Mushuk implements Hayvon {
ism = "Miti";
ovoz() { return "Miyov!"; }
}
implements — "bu class interface ning barcha talablarini bajaradi" kafolat. Biror metod yetishmasa — TypeScript darhol ko'rsatadi.
Tez-tez uchraydigan xatolar
Qo'shimcha xususiyat bilan to'g'ridan tayinlash:
interface Foydalanuvchi { ism: string; yosh: number; }
const user: Foydalanuvchi = {
ism: "Jasur",
yosh: 25,
bio: "Developer", // ❌ — 'bio' bu interfaceda yo'q
};
Yechim: interfacega bio? qo'shing yoki alohida o'zgaruvchi orqali bering:
const malumot = { ism: "Jasur", yosh: 25, bio: "Developer" };
const user: Foydalanuvchi = malumot; // ✅ — structural typing ishlaydi
Interface ni runtime da ishlatish:
if (x instanceof Foydalanuvchi) { } // ❌ — interface runtime da yo'q
Interface faqat kompilyatsiya vaqtida mavjud. instanceof faqat class bilan ishlaydi.
Xulosa
interface Foydalanuvchi {
ism: string; // majburiy
yosh: number; // majburiy
email: string; // majburiy
}
const user: Foydalanuvchi = { ... } // o'zgaruvchi
function fn(u: Foydalanuvchi) { ... } // parametr
class X implements Foydalanuvchi { ... } // class shartnomasi
Interface — ob'ektning shakli. Bir marta e'lon, istalgancha ishlatish. Bir joyda o'zgarish — hamma joyda yangilanadi.
Keyingi dars
17-dars: Optional (?), readonly, Index signature