TypeScript'da generic'lar nima?

MiddleTypeScript #typescript #generics

Savol

TypeScript'da generic'lar nima uchun kerak va ulardan qanday foydalanish kerak?

Qisqa javob

Generic'lar tip xavfsizligini saqlagan holda turli xil ma'lumot tiplari bilan ishlaydigan funksiyalar, klasslar va tiplarni yozish imkonini beradi — any o'rniga biz kirish va chiqish tipi o'rtasidagi bog'liqlikka ega bo'lamiz.

Batafsil javob

Generic'larsiz har bir tip uchun kodni takrorlashga yoki tip tekshiruvini yo'qotib, any ishlatishga to'g'ri kelardi. Generic-parametr (odatda T) — chaqiruv vaqtida qo'yiladigan "tip o'zgaruvchisi".

function identity<T>(value: T): T {
  return value
}

identity<string>('hello') // T = string
identity(42)               // T avtomatik number sifatida chiqariladi

Generic'lar ko'pincha extends orqali cheklanadi:

function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key]
}

Bu yerda K extends keyof T keyning T obyektining mavjud xususiyati ekanligini kafolatlaydi, TypeScript esa qaytariladigan qiymatning to'g'ri tipini chiqarib oladi.

Misol

interface ApiResponse<TData> {
  data: TData
  error: string | null
}

async function fetchJson<TData>(url: string): Promise<ApiResponse<TData>> {
  const res = await fetch(url)
  return { data: await res.json(), error: null }
}

interface User { id: number; name: string }

const { data } = await fetchJson<User>('/api/user/1')
data.name // TypeScript bu string ekanini biladi

Qo'shimcha savollar

  • Generic'ni aniq tiplar to'plami bilan qanday cheklash mumkin?
  • Standart generic'lar (<T = string>) nima?
  • Generic'lar union tiplardan nimasi bilan farq qiladi?