Skip to main content

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)

  1. 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.

  1. 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.

  1. Partial ve Required farkı nedir?

Partial<T> tüm alanları isteğe bağlı yapar, Required<T> ise hepsini zorunlu hale getirir.

  1. 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 🚀