Type alias — yaratish, ishlatish, kengaytirish

~15 daq · TypeScript · Asosiy Turlar

Oldingi darsda inline ob'ekt tur yozdik. Bir muammo bor — bir xil tuzilma har joyda qayta yoziladi:

function saqlash(user: { ism: string; yosh: number; email: string }) { ... }
function yuklash(user: { ism: string; yosh: number; email: string }) { ... }
function yangilash(user: { ism: string; yosh: number; email: string }) { ... }

email qo'shmoqchi bo'lsangiz — uchta joyni o'zgartirish kerak. Yechim — Type alias: bir joyda nom berib, istalgan joyda ishlatish.


Type alias nima?

Type alias — turga nom berish. Bir marta yoziladi, istalgancha joyda ishlatiladi.

type Foydalanuvchi = {
  ism:   string;
  yosh:  number;
  email: string;
};

Endi uchta funksiya ham shu nomdan foydalanadi:

function saqlash(user: Foydalanuvchi):  void { ... }
function yuklash(user: Foydalanuvchi):  void { ... }
function yangilash(user: Foydalanuvchi): void { ... }

email qo'shish kerak bo'lsa — faqat Foydalanuvchi turini o'zgartirish kifoya. Hamma joyda avtomatik yangilanadi.


Hayotiy o'xshatma

Muhandislik chizmasi. Bir xil detalning chizmasi bir marta ishlanadi. Keyin zavod shu chizmadan minglab detal yasaydi. Chizmada o'zgarish bo'lsa — boshqa detal yasalmaydi, faqat chizma o'zgaradi.

type alias — o'sha chizma. Bir bor belgilab, har joyda ishlatiladi.


Primitive tur uchun alias

Type alias faqat ob'ektlar uchun emas — istalgan tur uchun nom berish mumkin:

type Id     = number;
type Ism    = string;
type Faol   = boolean;

function topish(id: Id): Foydalanuvchi { ... }

Bu ko'pincha kodni o'qishni osonlashtiradi. id: number o'rniga id: Id — maqsad aniqroq.


& — ikki turni birlashtirish

Hayotiy o'xshatma

Ish joyingizda ikkita blanki bor: "Shaxsiy ma'lumotlar" va "Lavozim ma'lumotlari". Yangi xodim uchun ikkala blankning hammasi to'ldiriladi. & — aynan shu: ikkala turning barcha xususiyatlarini birlashtirib, yangi tur yaratish.

type ShaxsiyMalumot = {
  ism:   string;
  yosh:  number;
};

type LavozimMalumot = {
  lavozim:  string;
  bo_lim:   string;
};

type Xodim = ShaxsiyMalumot & LavozimMalumot;

Xodim endi to'rtta xususiyatga ega:

const xodim: Xodim = {
  ism:      "Jasur",
  yosh:     28,
  lavozim:  "Backend developer",
  bo_lim:   "IT",
}; // ✅ — hammasi kerak

Bitta xususiyat yetishmasa — TypeScript xato ko'rsatadi.


Qayta ishlatish va kengaytirish

Mavjud turga yangi xususiyat qo'shib, kengaytirilgan tur yaratish:

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

type MahsulotRasmi = Mahsulot & {
  rasm_url: string;
};

// MahsulotRasmi = id + nomi + narxi + rasm_url

Bu usul — mavjud turni o'zgartirmay, ustiga qurish. Mahsulot boshqa joylarda o'zgarishsiz qoladi.


Type alias va ob'ekt

Type alias ob'ekt turi uchun eng ko'p ishlatiladi. Lekin union, tuple va boshqa murakkab turlar uchun ham:

type Id       = number | string;          // union
type Koordinat = [number, number];        // tuple
type Qayta    = (son: number) => number;  // funksiya turi

Tez-tez uchraydigan xatolar

Bir xil nomni ikki marta e'lon qilish:

type Foydalanuvchi = { ism: string };
type Foydalanuvchi = { yosh: number };
// ❌ — Duplicate identifier 'Foydalanuvchi'

Type alias bir marta e'lon qilinadi. Kengaytirish kerak bo'lsa — & ishlatiladi. Interface esa qayta e'lon qilinishi mumkin (declaration merging) — bu keyingi bo'limda.

type ni const deb o'ylash:

type Holat = "faol"; // bu qiymat emas — faqat tur
const holat = "faol"; // bu qiymat

type — faqat kompilyatsiya vaqtida mavjud. Runtime da yo'q bo'ladi.


Xulosa

type alias — turga nom berish. Bir marta yoziladi, istalgancha joyda ishlatiladi.

& — ikki turni birlashtiradi. Har ikkisining barcha xususiyatlari kerak bo'ladi.

Inline ob'ekt tur vs type alias: bir joyda ishlatilsa — inline. Ko'p joyda takrorlansa — type alias.


Keyingi dars

12-dars: Union turlar — | operatori, narrowing bilan ishlash