Utility Types — Partial, Required, Readonly, Record

~20 daq · TypeScript · Ilg'or Turlar

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