TypeScript'da qanday o'rnatilgan Utility Types mavjud?

MiddleTypeScript #typescript #utility-types

Savol

TypeScript'da qanday foydali o'rnatilgan Utility Types mavjud va ularni qachon qo'llash kerak?

Qisqa javob

Utility Types — mavjud tiplarni o'zgartiradigan o'rnatilgan generic tiplar: maydonlarni ixtiyoriy qiladi, kichik to'plamni tanlaydi, kalitlarni o'zgartiradi va h.k. Bu interfeyslarni qo'lda takrorlamaslik imkonini beradi.

Batafsil javob

Eng ko'p ishlatiladiganlari:

  • Partial<T> — barcha maydonlar ixtiyoriy bo'lib qoladi. Yangilash (PATCH) obyektlari uchun qulay.
  • Required<T> — teskarisi: barcha maydonlar majburiy bo'ladi.
  • Pick<T, K> — faqat ko'rsatilgan K maydonlarini qoldiradi.
  • Omit<T, K> — ko'rsatilgan maydonlarni chiqarib tashlaydi.
  • Record<K, V> — kalitlari K va qiymatlari V bo'lgan lug'at-obyekt.
  • Readonly<T> — maydonlarni qayta tayinlashni taqiqlaydi.
  • ReturnType<F> — funksiyaning qaytariladigan qiymati tipini chiqarib oladi.

Misol

interface User {
  id: number
  name: string
  email: string
  password: string
}

// Profilni yangilash formasi uchun parol va id kerak emas
type UpdateUserDto = Partial<Omit<User, 'id' | 'password'>>

function updateUser(id: number, dto: UpdateUserDto) { /* ... */ }
updateUser(1, { name: 'Yangi ism' }) // qolgan maydonlar majburiy emas

// Rollar lug'ati
type RolePermissions = Record<'admin' | 'editor' | 'viewer', string[]>

const permissions: RolePermissions = {
  admin: ['read', 'write', 'delete'],
  editor: ['read', 'write'],
  viewer: ['read']
}

Qo'shimcha savollar

  • Partial<T>ni mapped types orqali o'zingiz qanday amalga oshirasiz?
  • Pick/Omit qiymatlar darajasidagi destrukturizatsiyadan nimasi bilan farq qiladi?
  • Shartli tiplar (T extends U ? X : Y) nima?