Utility Types — Partial, Required, Readonly, Record
TypeScript da keng tarqalgan tur o'zgartirishlar uchun built-in Utility Types mavjud — har safar qaytadan yozish shart emas.
Partial<T> — barchasi optional
Mavjud turning barcha xususiyatlarini optional qiladi:
type Foydalanuvchi = { id: number; ism: string; email: string };
type FoydalanuvchiYangilash = Partial<Foydalanuvchi>;
// { id?: number; ism?: string; email?: string }
function yangilash(id: number, o_zgarish: Partial<Foydalanuvchi>): void {
// faqat berilgan xususiyatlar yangilanadi
}
yangilash(1, { ism: "Vali" }); // ✅ faqat ism
yangilash(1, { email: "v@mail.com" }); // ✅ faqat email
Required<T> — barchasi majburiy
Optional xususiyatlarni majburiy qiladi:
type SozlamalarIxtiyoriy = { host?: string; port?: number; ssl?: boolean };
type SozlamalarMajburiy = Required<SozlamalarIxtiyoriy>;
// { host: string; port: number; ssl: boolean }
function ulanish(s: Required<SozlamalarIxtiyoriy>): void {
// barcha xususiyatlar bo'lishi shart
}
Readonly<T> — barchasi readonly
type Config = { host: string; port: number };
type ReadonlyConfig = Readonly<Config>;
// { readonly host: string; readonly port: number }
const cfg: Readonly<Config> = { host: "localhost", port: 5432 };
cfg.host = "boshqa"; // ❌ — readonly
Record<K, V> — kalit-qiymat ob'ekt
Aniq kalitlar va qiymat turi bilan ob'ekt:
type Tezkorlik = Record<string, number>;
// { [key: string]: number }
const balllar: Record<string, number> = {
matematika: 95,
fizika: 87,
ingliz: 92,
};
Union literal kalitlar bilan:
type Ranglar = "qizil" | "yashil" | "ko_k";
type RangKodi = Record<Ranglar, string>;
// { qizil: string; yashil: string; ko_k: string }
const kodlar: RangKodi = {
qizil: "#e00",
yashil: "#0e0",
ko_k: "#00e",
};
Amaliy — Partial bilan PATCH endpoint
type Mahsulot = { id: number; nomi: string; narxi: number; faol: boolean };
async function patch(id: number, o_zgarish: Partial<Omit<Mahsulot, "id">>) {
// id o'zgarmaydi, qolganlar ixtiyoriy
}
await patch(1, { narxi: 15_000 });
await patch(2, { nomi: "Yangi nom", faol: false });
Xulosa
Partial<T> — barcha xususiyatlar optional
Required<T> — barcha xususiyatlar majburiy
Readonly<T> — barcha xususiyatlar readonly
Record<K, V> — K kalitlari, V qiymat turi
// Amaliy
type Update<T> = Partial<Omit<T, "id">>;
type Cache<T> = Record<string, T>;
type Config = Readonly<{ host: string; port: number }>;
Keyingi dars
51-dars: Utility Types — Pick, Omit, Extract, Exclude, NonNullable