Blog/typescript/TypeScript Utility Types: Pick, Omit, Partial — Praktiki Nümunələr
typescript

TypeScript Utility Types: Pick, Omit, Partial — Praktiki Nümunələr

B
Baku Stack AI
·24 mart 2026·4 dəq oxuma·25 baxış
typescript.ascii
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ ■ ■ ■ TYPESCRIPT ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ User {name,email..} ▓
▓ ↓ ↓ ↓ ▓
▓ Pick Omit Partial▓
▓ ↓ ↓ ↓ ▓
▓ ✓name ✓name ?name ▓
▓ ✓email ✓email ?email▓
▓ ░id ░░░░░ ?id ▓
▓──────────────────────▓
▓ Populyarlıq: ▓
▓ Partial ▓▓▓▓▓▓▓░ 87%▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

TypeScript-in ən çox istifadə olunan utility type-ları real layihə nümunələri ilə. Bakıda interview-da soruşulan sualların cavabları burada.

TypeScript Utility Types: Pick, Omit, Partial — Praktiki Nümunələr

Salam, developer dostum! Əgər Bakıda front-end və ya full-stack iş axtarırsan, TypeScript artıq "bilsən yaxşı olar" deyil — tələbdir. ABB, Kapital Bank, PASHA Holding, Bravo kimi şirkətlərin vakansiyalarına bax: demək olar ki, hamısında TypeScript yazılıb. LinkedIn-də "TypeScript Baku" axtarışı etsən, orta maaş 1500-3500 AZN arasında dəyişən pozisiyalar görəcəksən. Senior səviyyədə isə bu rəqəm 4000+ AZN-ə çıxır.

Bu gün sənə TypeScript-in ən praktiki silahlarından üçünü öyrədəcəm: Pick, OmitPartial. Bunlar utility type-lardır — yəni TypeScript-in özünün sənə verdiyi hazır alətlər. Onları başa düşsən, kodun həm təmiz, həm də təhlükəsiz olacaq.


Niyə Utility Types?

Təsəvvür et ki, e-commerce layihə yazırsan — məsələn, lokal bir startup üçün. Sənin User modelində 15 field var. Amma profil redaktə səhifəsində cəmi 4-ü lazımdır. Bütün 15 field-i yenidən yazmaq? Əlbəttə yox. Məhz burada utility type-lar işə düşür.

Stack Overflow-nun 2025-ci il Developer Survey-inə görə, TypeScript istifadə edən developer-lərin 87%-i utility type-lardan müntəzəm istifadə edir. Ən populyar üçlük isə məhz Partial, PickOmit-dir.


1. Pick — "Mənə yalnız bunlar lazımdır"

Pick<Type, Keys> — mövcud type-dan yalnız istədiyin field-ləri seçirsən.

Real ssenari: İstifadəçi kartı komponenti

Tutaq ki, PASHA Life-ın müştəri paneli üçün işləyirsən:

typescript
interface User { id: number; fullName: string; email: string; phone: string; address: string; finCode: string; balance: number; createdAt: Date; } // Sidebar-da yalnız ad və email göstərmək lazımdır type UserCard = Pick<User, 'fullName' | 'email'>; // Nəticə: // type UserCard = { // fullName: string; // email: string; // } const renderCard = (user: UserCard) => { console.log(`${user.fullName}${user.email}`); };

Nə qazandıq? UserCard type-ı yalnız lazım olan field-ləri saxlayır. Əgər sabah User-ə yeni field əlavə olunsa, UserCard avtomatik təmiz qalır. Komponent lazımsız data ilə şişmir.


2. Omit — "Bunlardan başqa hamısı lazımdır"

Omit<Type, Keys> — Pick-in əksidir. Hansı field-ləri istəmədiyini deyirsən, qalanları qalır.

Real ssenari: Yeni istifadəçi yaratmaq

API-yə POST sorğu göndərəndə idcreatedAt server tərəfdən yaranır. Onları forma type-ından çıxarmalıyıq:

typescript
interface User { id: number; fullName: string; email: string; phone: string; address: string; finCode: string; balance: number; createdAt: Date; } // Yeni user yaradanda id və createdAt lazım deyil type CreateUserDTO = Omit<User, 'id' | 'createdAt'>; const createUser = async (data: CreateUserDTO) => { const response = await fetch('/api/users', { method: 'POST', body: JSON.stringify(data), }); return response.json(); }; // İstifadə createUser({ fullName: 'Əli Həsənov', email: 'ali@example.az', phone: '+994501234567', address: 'Bakı, Nəsimi rayonu', finCode: '1A2B3C4', balance: 0, });

Nə vaxt Pick, nə vaxt Omit? Sadə qayda: əgər saxlamaq istədiyin field-lər azdırsa — Pick. Çıxarmaq istədiyin field-lər azdırsa — Omit.


3. Partial — "Heç biri məcburi deyil"

Partial<Type> — bütün field-ləri optional (?) edir. Update əməliyyatları üçün əvəzsizdir.

Real ssenari: Profil yeniləmə

İstifadəçi yalnız telefon nömrəsini dəyişmək istəyir. Bütün field-ləri göndərməyə ehtiyac yoxdur:

typescript
type UpdateUserDTO = Partial<Omit<User, 'id' | 'createdAt'>>; // Nəticə: bütün field-lər optional oldu // type UpdateUserDTO = { // fullName?: string; // email?: string; // phone?: string; // address?: string; // finCode?: string; // balance?: number; // } const updateUser = async (id: number, data: UpdateUserDTO) => { const response = await fetch(`/api/users/${id}`, { method: 'PATCH', body: JSON.stringify(data), }); return response.json(); }; // Yalnız telefonu yeniləyirik updateUser(42, { phone: '+994551112233' }); // Və ya yalnız ünvanı updateUser(42, { address: 'Bakı, Yasamal' });

Diqqət et: burada PartialOmit-i birlikdə istifadə etdik. Bu, real layihələrdə çox rast gəlinən pattern-dir.


Bonus: Hamısını birlikdə istifadə et

Gəl tam bir CRUD type sistemi quraq:

typescript
interface Product { id: number; name: string; price: number; category: string; imageUrl: string; stock: number; createdAt: Date; updatedAt: Date; } // Məhsul yaratmaq üçün type CreateProductDTO = Omit<Product, 'id' | 'createdAt' | 'updatedAt'>; // Məhsul yeniləmək üçün type UpdateProductDTO = Partial<CreateProductDTO>; // Məhsul siyahısında göstərmək üçün type ProductListItem = Pick<Product, 'id' | 'name' | 'price' | 'imageUrl'>; // Axtarış nəticəsində type ProductSearchResult = Pick<Product, 'id' | 'name' | 'category'>;

4 sətir type — və bütün CRUD əməliyyatları üçün type-safe strukturun hazırdır. Heç bir dublikat yoxdur.


Interview-da nə soruşurlar?

Bakıdakı texnoloji şirkətlərdə TypeScript interview-larında bu suallar populyardır:

  • "Pick və Omit arasında fərq nədir?" — Pick saxlayır, Omit çıxarır.
  • "Partial nə edir?" — Bütün property-ləri optional edir.
  • "Required nədir?" — Partial-ın əksi, hamısını məcburi edir.
  • "Real layihədə harada istifadə etmisən?" — DTO pattern-ini izah et, yuxarıdakı nümunələri ver.

Xülasə

Utility TypeNə edirNə vaxt istifadə et
PickSeçilmiş field-ləri saxlayırKomponent props, siyahı görünüşü
OmitSeçilmiş field-ləri çıxarırDTO yaratmaq, server field-ləri ayırmaq
PartialHamısını optional edirUpdate/PATCH əməliyyatları

Bu üç utility type-ı mənimsəsən, TypeScript kodun daha təmiz, daha təhlükəsiz və daha maintainable olacaq. Bakıda interview-a gedəndə bu biliklər sənə real üstünlük verəcək.

Kodu yaz, type-ları düzgün qur, qalan hissəsini TypeScript compiler özü yoxlasın. Uğurlar, developer! 🚀

Oxşar məqalələr

typescript.ascii
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ ■ ■ ■ TYPESCRIPT ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ z.string() ✓ safe ▓
▓ z.number() ✓ safe ▓
▓ z.enum() ✓ safe ▓
▓──────────────────────▓
▓ API data → unknown ▓
▓ ↓ safeParse() ▓
▓ ↓ validate ▓▓▓▓░░░ ▓
▓ ↓ result.success ▓
▓ ✓ typed & safe! ▓
▓ ● runtime: 100% ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

Zod ilə TypeScript Runtime Validasiyası: Bugları Production-da Deyil, Əvvəlcədən Tut

TypeScript compile-time-da tip yoxlayır, amma runtime-da API-dən gələn datanı kim yoxlayacaq? Zod ilə validasiyanı necə həll edəcəyini real nümunələrlə göstərirəm.

typescript.ascii
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ ■ ■ ■ TYPESCRIPT ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ supabase gen types ▓
▓ ▓▓▓▓▓▓▓▓▓▓▓▓░░░ 80% ▓
▓ ▓
▓ → Database → Types ▓
▓ → Types → Client ▓
▓ → Client → IDE ✓ ▓
▓ ▓
▓ ● Row ● Insert ▓
▓ ● Update ● Delete ▓
▓ type safety: 100% ✓ ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

TypeScript ilə Supabase inteqrasiyası — tam tip təhlükəsizliyi

Supabase + TypeScript birlikdə işlədəndə runtime xətaları minimuma enir. Database-dən gələn hər sətir tipli olur. Necə? Bu məqalədə.

typescript.ascii
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ ■ ■ ■ TYPESCRIPT ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ function id<T>(x:T):T ▓
▓ return x; ▓
▓ ▓
▓ ● id<string>("Bakı") ▓
▓ → "Bakı" ✓ ▓
▓ ● id<number>(2026) ▓
▓ → 2026 ✓ ▓
▓ ▓
▓ Generics skill: ▓
▓ ▓▓▓▓▓▓▓▓░░ 80% ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

TypeScript Generics — Nədir, Niyə Lazımdır, Necə İstifadə Olunur?

TypeScript generics-i başa düşmək Bakıda frontend və backend vakansiyaların 70%-ində tələb olunan skilldir. Bu bələdçi ilə generics-i bir dəfəlik öyrən.

← Bloqa qayıt