Utility Types — Pick, Omit, Extract, Exclude, NonNullable

~20 daq · TypeScript · Ilg'or Turlar

Foydalanuvchi ob'ektidan faqat id, ism, email ni qaytarish — parol_hash ni emas. Yoki union turdan faqat string turlarni olish. Pick, Omit, Extract, Exclude — turlardan keraklilarni tanlash yoki chiqarib tashlash.


Pick<T, K> — tanlangan xususiyatlar

Faqat belgilangan kalitlarni oladi:

type Foydalanuvchi = {
  id:         number;
  ism:        string;
  email:      string;
  parol_hash: string;
};

type XavfsizFoydalanuvchi = Pick<Foydalanuvchi, "id" | "ism" | "email">;
// { id: number; ism: string; email: string }
function profilQaytarish(u: Foydalanuvchi): Pick<Foydalanuvchi, "id" | "ism"> {
  return { id: u.id, ism: u.ism };
}

Omit<T, K> — chiqarib tashlash

Belgilangan kalitlardan boshqa hammasi:

type OmmaviyProfil = Omit<Foydalanuvchi, "parol_hash">;
// { id: number; ism: string; email: string }

type Yaratish = Omit<Foydalanuvchi, "id">; // id kerak emas — DB o'zi beradi
// { ism: string; email: string; parol_hash: string }

Extract<T, U> — mos kelganlarni olish

Union dan faqat U ga tayinlanishi mumkin bo'lgan turlar:

type Aralash = string | number | boolean | null;

type FaqatMatn = Extract<Aralash, string>;
// string

type MatnYokiSon = Extract<Aralash, string | number>;
// string | number

Exclude<T, U> — mos kelganlarni chiqarish

Union dan U ga tayinlanishi mumkin bo'lganlarni chiqarib tashlaydi:

type Aralash = string | number | boolean | null;

type NullSiz = Exclude<Aralash, null>;
// string | number | boolean

type FaqatSon = Exclude<Aralash, string | boolean | null>;
// number

NonNullable<T> — null va undefined chiqarish

type MaybeString = string | null | undefined;
type AniqString  = NonNullable<MaybeString>;
// string

Exclude<T, null | undefined> bilan bir xil.


Amaliy — CRUD operatsiyalar

type Mahsulot = {
  id:         number;
  nomi:       string;
  narxi:      number;
  yaratilgan: Date;
};

type MahsulotYaratish = Omit<Mahsulot, "id" | "yaratilgan">;
// { nomi: string; narxi: number }

type MahsulotYangilash = Partial<MahsulotYaratish>;
// { nomi?: string; narxi?: number }

type MahsulotKarta = Pick<Mahsulot, "id" | "nomi">;
// { id: number; nomi: string }

Xulosa

Pick<T, "a" | "b">      — faqat a va b
Omit<T, "a" | "b">      — a va b dan boshqasi
Extract<T, U>            — T dan U ga mos kelganlar
Exclude<T, U>            — T dan U ga mos kelmaganlar
NonNullable<T>           — null va undefined chiqarish

// Pattern — CRUD
type Create = Omit<T, "id" | "yaratilgan">;
type Update = Partial<Omit<T, "id">>;
type Card   = Pick<T, "id" | "nomi">;

Keyingi dars

52-dars: Utility Types — ReturnType, Parameters, InstanceType, Awaited