Generic interface va type alias
API javob tuzilmasi har safar bir xil — faqat data qismi o'zgaradi: gohida User[], gohida Product, gohida Order. Har holat uchun alohida interface yozish — takror. Generic interface bir marta yoziladi, har tur bilan ishlaydi.
Generic interface
interface ApiJavob<T> {
data: T;
status: number;
xabar: string;
}
T — tur parametri. Ishlatishda aniqlanadi:
type Foydalanuvchi = { id: number; ism: string };
const javob: ApiJavob<Foydalanuvchi> = {
data: { id: 1, ism: "Jasur" },
status: 200,
xabar: "OK",
};
javob.data.ism; // ✅ string
Generic type alias
type bilan ham bir xil:
type Javob<T> = {
data: T;
status: number;
loading: boolean;
};
type Xato<T = string> = { // default tur
xabar: T;
kod: number;
};
const xato: Xato = { xabar: "Topilmadi", kod: 404 };
// T=string (default)
const xato2: Xato<Error> = { xabar: new Error("..."), kod: 500 };
Generic interface — bir nechta parametr
interface Juft<Birinchi, Ikkinchi> {
birinchi: Birinchi;
ikkinchi: Ikkinchi;
}
const juft: Juft<string, number> = { birinchi: "Ali", ikkinchi: 25 };
Amaliy — Pagination
interface Sahifalangan<T> {
items: T[];
jami: number;
sahifa: number;
sahifaHajm: number;
}
type FoydalanuvchilarJavob = Sahifalangan<Foydalanuvchi>;
const javob: FoydalanuvchilarJavob = {
items: [{ id: 1, ism: "Ali" }],
jami: 100,
sahifa: 1,
sahifaHajm: 10,
};
Generic va extends
Interface meros olganda tur parametri uzatiladi:
interface OqiladiBazasi<T> {
olish(id: number): Promise<T>;
barchasi(): Promise<T[]>;
}
interface FoydalanuvchiBazasi extends OqiladiBazasi<Foydalanuvchi> {
emailBilan(email: string): Promise<Foydalanuvchi | null>;
}
Tez-tez uchraydigan xatolar
Generic parametrni ko'rsatmaslik:
interface Javob<T> { data: T; }
const j: Javob = { data: "..." }; // ❌ — T ko'rsatilmagan
const j: Javob<string> = { data: "..." }; // ✅
Xulosa
// Generic interface
interface ApiJavob<T> {
data: T;
status: number;
}
// Generic type alias
type Javob<T> = { data: T; xabar: string };
// Default tur
type Xato<T = string> = { xabar: T };
// Ishlatish
const j: ApiJavob<User> = { data: user, status: 200 };
const j: ApiJavob<User[]> = { data: users, status: 200 };
Keyingi dars
35-dars: Generic class — tur parametrli sinflar