TypeScript’te Özel Tipler Nasıl Oluşturulur?
🎯 Bu Rehberde Ne Öğreneceksiniz?
Bu rehberde TypeScript’te type anahtar kelimesiyle kendi veri yapılarını nasıl tanımlayacağınızı,
union (|) ve intersection (&) operatörleriyle tipleri nasıl birleştireceğinizi,
ve Record, Pick, Omit, Partial gibi yardımcı tiplerle mevcut tipleri nasıl dönüştürebileceğinizi öğreneceksiniz.
Ayrıca ? (opsiyonel özellikler), indexable types (dinamik alanlar) ve template literal types gibi modern TypeScript özelliklerini uygulamalı örneklerle göreceksiniz.
🔍 1. Özel Tiplerin Temelleri
TypeScript, karmaşık veri yapılarını açık ve güvenli biçimde tanımlamak için type anahtar kelimesini sunar.
Bu, kodun daha anlaşılır, belgelenebilir ve hataya dayanıklı hale gelmesini sağlar.
🔸 Temel Tip Tanımlama
type Programci = {
ad: string;
uzmanlikAlanlari: string[];
};
Bu tip, ad ve uzmanlikAlanlari özelliklerine sahip bir nesneyi tanımlar.
const ada: Programci = {
ad: 'Ada Lovelace',
uzmanlikAlanlari: ['Matematik', 'Bilişim', 'İlk Programcı']
};
Derleyici, eksik ya da hatalı tipli alanlar varsa anında hata verir.
🧩 2. İsteğe Bağlı (Opsiyonel) Özellikler
Bazı alanların her zaman bulunması gerekmez. Bunun için ? kullanılır.
type Programci = {
ad: string;
uzmanlikAlanlari?: string[];
};
const ahmet: Programci = {
ad: 'Ahmet Yılmaz'
};
uzmanlikAlanlari alanı artık isteğe bağlıdır.
⚙️ 3. Genişletilebilir Tipler (Indexable Types)
Anahtar sayısı önceden bilinmeyen durumlarda index signature kullanılır.
type AyarVerisi = {
[anahtar: string]: any;
};
const sunucuAyar: AyarVerisi = {
sunucuID: 'tr1-node01',
aktif: true,
port: 8080
};
Bu, API yanıtları veya dinamik konfigürasyon nesnelerini modellemek için kullanışlıdır.
🔗 4. Tipleri Birleştirme (Union & Intersection)
🧱 Birleşim Tipleri (Union)
Bir değerin birden fazla tipten biri olabileceğini belirtir.
type UrunKodu = number | string;
const kod1: UrunKodu = 'TR1024';
const kod2: UrunKodu = 1024;
⚓ Kesişim Tipleri (Intersection)
Birden fazla tipi birleştirir ve tüm özelliklere sahip olmayı zorunlu kılar.
type ApiYanit = { durumKodu: number; gecerli: boolean; };
type Kullanici = { ad: string; };
type KullaniciYaniti = ApiYanit & Kullanici;
let cevap: KullaniciYaniti = {
durumKodu: 200,
gecerli: true,
ad: 'Rabisu'
};
🧵 5. Şablon Dizesi Tipleri (Template Literal Types)
TypeScript 4.1 ile gelen bu özellik, belirli formatta string tanımlamayı sağlar.
type SunucuID = `rabisu_${number}`;
const sunucu: SunucuID = 'rabisu_500';
// const hatali: SunucuID = 'tr_500'; // ❌ Hata verir
🧰 6. Yardımcı Tipler (Utility Types)
| 🧩 Tip | 💡 Açıklama | 🔧 Kullanım |
|---|---|---|
Partial<T> | T içindeki tüm özellikleri isteğe bağlı hale getirir. | Güncelleme işlemlerinde |
Pick<T, K> | Belirli anahtarları seçerek yeni bir tip oluşturur. | Alt tip oluşturma |
Omit<T, K> | Belirli alanları hariç tutar. | Hassas veriyi gizleme |
Record<K, T> | Anahtar-değer tipinde sözlük oluşturur. | Dinamik veri eşleştirme |
Örnekler
type Kullanici = { id: number; ad: string; eposta: string };
// 1️⃣ Partial
type KullaniciGuncelle = Partial<Kullanici>;
// 2️⃣ Pick
type KullaniciBilgisi = Pick<Kullanici, 'ad' | 'eposta'>;
// 3️⃣ Omit
type KullaniciDetay = Omit<Kullanici, 'id'>;
// 4️⃣ Record
type Metrikler = Record<string, number>;
const sunucuMetrikleri: Metrikler = { cpu: 75, ram: 4096 };
💬 Sıkça Sorulan Sorular (SSS)
- type ve interface farkı nedir?
interface genişletilebilir yapılar içindir; type birleşim veya dönüştürme senaryolarında daha esnektir. Modern TS’de genellikle birlikte kullanılabilirler.
- Neden any yerine özel tip kullanmalıyım?
any tip güvenliğini tamamen kaldırır. Özel tipler, hata riskini derleme aşamasında azaltır.
- Partial ve Required farkı nedir?
Partial<T> tüm alanları isteğe bağlı yapar, Required<T> ise hepsini zorunlu hale getirir.
- Büyük projelerde hangi ayarları açmalıyım?
tsconfig.json içinde "strict": true mutlaka aktif olmalı. Ek olarak typescript-eslint ile linter denetimi kurmak kaliteyi artırır.
🧭 Sonuç
Bu rehberde TypeScript’te özel tipleri oluşturmayı, birleştirmeyi ve yardımcı tiplerle dönüştürmeyi öğrendiniz. Artık projelerinizde tip güvenliğini artırabilir, veri yapılarınızı daha net ve sürdürülebilir hale getirebilirsiniz.
💡 Uygulamanızı hemen test etmek için: Kendi TypeScript projenizi Rabisu Bulut’un güçlü Node.js altyapısında dağıtın ve ölçeklenebilir geliştirme deneyiminin tadını çıkarın 🚀