TypeScript Programlama Dilinde Mülakat Soru Rehberi

Can Gül
21/3/2025

TypeScript, modern web ve mobil uygulama geliştirme süreçlerinde giderek daha popüler hale gelen güçlü bir programlama dilidir. JavaScript'in bir üst kümesi olarak kabul edilen TypeScript, statik tür denetimi, daha iyi hata yönetimi ve gelişmiş kod tamamlama gibi avantajlar sunar. Özellikle büyük ölçekli projelerde tercih edilen TypeScript, React ve Node.js gibi popüler teknolojilerle entegre çalışarak geliştiricilere daha güvenli ve okunabilir bir kod yapısı sağlar.

Bu yazımızda, TypeScript ile ilgili en sık sorulan mülakat sorularını ve detaylı yanıtlarını sizler için derledik. TypeScript’in temel kavramlarından ileri seviye tekniklerine kadar geniş bir perspektif sunarak mülakatlarda ve gerçek dünya projelerinde başarılı olmanıza yardımcı olacak ipuçlarını paylaşıyoruz. Eğer TypeScript'e yeni başlıyorsanız veya mevcut bilginizi güçlendirmek istiyorsanız, bu rehber tam size göre!

1. TypeScript nedir ve JavaScript'ten farkları nelerdir?

TypeScript, Microsoft tarafından geliştirilen, açık kaynaklı ve statik olarak tür denetimi yapabilen bir programlama dilidir. JavaScript’in bir üst kümesi (superset) olarak kabul edilir ve JavaScript kodlarını daha güvenli, okunabilir ve ölçeklenebilir hale getirmek için kullanılır.

Farkları:

Tür Desteği:

Kod Hataları:

Gelişmiş ES Özellikleri:

Modülerlik:

Kod Tamamlama (IDE Desteği):

Özet: TypeScript, JavaScript’in güçlü ve eksik yönlerini geliştirerek daha sağlam, hataya dayanıklı ve büyük ölçekli projelere uygun hale getirilmiş bir dildir.

2. TypeScript’in avantajları nelerdir?

3. TypeScript nasıl derlenir ve çalıştırılır?

TypeScript dosyaları .ts uzantısı ile yazılır ve bir TypeScript derleyicisi (tsc) kullanılarak JavaScript’e çevrilir.

Kurulum:

npm install -g typescript

Derleme (Transpile) İşlemi:

tsc dosya.ts

Bu komut dosya.ts adlı TypeScript dosyasını JavaScript (dosya.js) dosyasına çevirir.

TypeScript Kodu Çalıştırma:

node dosya.js

Eğer ts-node modülü yüklü ise TypeScript kodunu direkt çalıştırabilirsiniz:

npx ts-node dosya.ts

4. TypeScript’te veri tipleri (primitive ve non-primitive) nelerdir?

TypeScript'te veri tipleri primitive (ilkel) ve non-primitive (referans) türler olarak ikiye ayrılır.

Primitive (İlkel) Veri Tipleri:

- string – Metinleri temsil eder.

let mesaj: string = "Merhaba TypeScript";

- number – Tamsayı ve ondalıklı sayıları ifade eder.

let sayi: number = 42;

- boolean – true veya false değerlerini alır.

let aktif: boolean = true;

- null & undefined – Değişkenin boş veya tanımsız olduğunu belirtir.

let bos: null = null;
let tanimsiz: undefined = undefined;

- symbol & bigint – Özel tiplerdir, genellikle düşük seviyeli işlemlerde kullanılır.

Non-Primitive (Referans) Veri Tipleri:

let sayilar: number[] = [1, 2, 3, 4];


let kisi: { ad: string, yas: number } = { ad: "Ahmet", yas: 30 };

function topla(a: number, b: number): number {
    return a + b;

let kullanici: [string, number] = ["Ali", 25];

5. “any”, “unknown” ve “never” tipleri arasındaki farklar nelerdir?

any:

unknown:

never:

Örnekler:

let x: any = "Merhaba";
x = 42;  // Hata vermez

let y: unknown = "Merhaba";
// console.log(y.length); // HATA: unknown türü üzerinde işlem yapmadan önce kontrol edilmelidir.

function hataFırlat(): never {
    throw new Error("Bu fonksiyon asla geri dönmez!");
}

6. Interface ve Type arasındaki farklar nelerdir?

Kullanım Alanı:

Genişletilebilirlik:

Performans:

Örnek Kullanım:

interface Kisi {
    ad: string;
    yas: number;
}

type Araba = {
    marka: string;
    model: string;
};

7. Enum (Enumerations) nedir ve nasıl kullanılır?

Enum, sabit değerleri temsil etmek için kullanılır.

enum Renk {
    Kirmizi = "KIRMIZI",
    Mavi = "MAVI",
    Yesil = "YESIL"
}

let benimRenk: Renk = Renk.Kirmizi;
console.log(benimRenk); // KIRMIZI

8. Tuple (Demet) nedir ve nasıl kullanılır?

Tuple, sabit uzunlukta ve belirli türlerde değerler içeren bir dizidir.

let kullanici: [string, number] = ["Ahmet", 30];

9. Type Assertion (Tip Dönüştürme) nedir ve nasıl kullanılır?

TypeScript’te, bir değişkenin türünü belirttiğiniz şekilde yorumlamasını sağlamak için kullanılır.

let deger: any = "Merhaba";
let uzunluk: number = (deger as string).length;

10. TypeScript dosyalarını tarayıcıda nasıl çalıştırabiliriz?

- TypeScript kodunu JavaScript’e derleyin:

tsc dosya.ts


- Ortaya çıkan dosya.js dosyasını HTML içinde çağırın:

<script src="dosya.js"></script>

11. readonly ve const farkları nelerdir?

Hem readonly hem de const, değişkenlerin değiştirilemez olmasını sağlar, ancak kullanım alanları farklıdır.

Kullanım Yeri:

Zamanlama (Atama Anı):

Nesne İçeriği Üzerindeki Etkisi:

Örnekler:

// readonly kullanımı
class Kisi {
    readonly ad: string;
    constructor(ad: string) {
        this.ad = ad;
    }
}

const kisi = new Kisi("Ahmet");
// kisi.ad = "Mehmet"; // HATA: readonly olduğu için değiştirilemez

// const kullanımı
const yas = 30;
// yas = 40; // HATA: const ile tanımlanan değişken değiştirilemez

const araba = { marka: "Toyota" };
araba.marka = "BMW"; // Geçerli! (const nesneyi değil, referansı korur)

12. Generics (Jenerikler) nedir ve nasıl kullanılır?

Generics, birden fazla veri türü ile çalışabilen kodlar yazmamızı sağlar. Fonksiyonlar, sınıflar ve arayüzler için kullanılabilir.

Generics ile Fonksiyon Kullanımı:

function ekle<T>(deger: T): T {    return deger;}console.log(ekle<string>("Merhaba")); // "Merhaba"console.log(ekle<number>(42)); // 42

Generics ile Sınıf Kullanımı:

class Depo<T> {    private veriler: T[] = [];    ekle(item: T) {        this.veriler.push(item);    }    getir(): T[] {        return this.veriler;    }}const stringDepo = new Depo<string>();stringDepo.ekle("TypeScript");console.log(stringDepo.getir()); // ["TypeScript"]

13. Union ve Intersection tipleri nedir?

Union Type (| operatörü):

Bir değişkenin birden fazla türden birini almasını sağlar.

let veri: string | number;veri = "Merhaba"; // Geçerliveri = 42; // Geçerli// veri = true; // HATA!

Intersection Type (& operatörü):

Birden fazla türü birleştirerek yeni bir tür oluşturur.

interface Kisi {    ad: string;    yas: number;}interface Calisan {    sirket: string;}type CalisanKisi = Kisi & Calisan;‍const kisi: CalisanKisi = {    ad: "Ahmet",    yas: 30,    sirket: "ABC Ltd."};

14. TypeScript’te bir nesneyi zorunlu veya opsiyonel hale getirmek için hangi tip yardımcılarını kullanabiliriz?

Opsiyonel (? operatörü):

interface Kullanici {    ad: string;    yas?: number; // Opsiyonel}

Partial<T> – Tüm özellikleri opsiyonel yapar:

interface Kullanici {    ad: string;    yas: number;}let k1: Partial<Kullanici> = { ad: "Ahmet" }; // yas eksik olabilir

Required<T> – Tüm özellikleri zorunlu yapar:

let k2: Required<Kullanici> = { ad: "Mehmet", yas: 25 }; // Tüm özellikler zorunlu

15. TypeScript’te Overload (Aşırı Yükleme) nedir ve nasıl çalışır?

Overload, aynı fonksiyonun farklı parametre türleriyle çalışmasını sağlar.

Örnek Kullanım:

function topla(a: number, b: number): number;
function topla(a: string, b: string): string;
function topla(a: any, b: any): any {
    return a + b;
}
console.log(topla(5, 10)); // 15
console.log(topla("Merhaba", " Dünya")); // "Merhaba Dünya"

Overload olmadan topla fonksiyonu sadece any olarak tanımlanabilir ve tür güvenliği sağlanamaz.

16. Abstract Class ile Interface farkları nelerdir?

Tanım:

Miras (Inheritance):

Çoklu Kalıtım (Multiple Inheritance):

Örnek Kullanım: 

abstract class Hayvan {
    abstract sesCikar(): void;
    hareket(): void {
        console.log("Hareket ediyor");
    }
}

Diğer Örnek:

interface Ucak {
    uc(): void;
}

class Boeing implements Ucak {
    uc() {
        console.log("Uçuyor");
    }
}

17. Mapped Types (Haritalı Tipler) nedir?

Mapped Types, mevcut bir tipi değiştirerek yeni bir tip oluşturmayı sağlar.

Örnek Kullanım:

type Ornek = {
    ad: string;
    yas: number;
};

type ReadonlyOrnek = {
    [K in keyof Ornek]: Readonly<Ornek[K]>;
};

// ReadonlyOrnek içinde tüm özellikler readonly olur.

18. Utility Types (Özel Tip Yardımcıları) nelerdir?

TypeScript, mevcut türleri daha verimli kullanabilmemiz için bazı yardımcı tipler sunar.

Partial<T>:

Required<T>:

Readonly<T>:

Pick<T, K>:

Omit<T, K>:

Örnekler:

interface Kisi {
    ad: string;
    yas: number;
    email: string;
}

// Partial - Tüm özellikleri opsiyonel yapar
let kisi1: Partial<Kisi> = { ad: "Ahmet" };

// Required - Tüm özellikleri zorunlu yapar
let kisi2: Required<Kisi> = { ad: "Ahmet", yas: 30, email: "a@example.com" };

// Readonly - Özellikleri değiştirilemez yapar
let kisi3: Readonly<Kisi> = { ad: "Ahmet", yas: 30, email: "a@example.com" };
// kisi3.yas = 35; // HATA!

// Pick - Sadece belirli özellikleri alır
let kisi4: Pick<Kisi, "ad" | "email"> = { ad: "Ahmet", email: "a@example.com" };

// Omit - Belirtilen özellikleri hariç tutar
let kisi5: Omit<Kisi, "email"> = { ad: "Ahmet", yas: 30 };

19. TypeScript ile Bir React veya Node.js Projesi Nasıl Oluşturulur?

A) React ile TypeScript Projesi Oluşturma

TypeScript destekli bir React projesi oluşturmak için aşağıdaki adımları takip edebilirsiniz.

1. Yeni Proje Oluşturma

npx create-react-app my-app --template typescript

Bu komut, TypeScript ile ön yapılandırılmış bir React projesi başlatır.

2. TypeScript Tiplerini Yükleme

React projelerinde TypeScript'in sağlıklı çalışması için bazı tip paketlerini yüklemek gerekir:

npm install @types/react @types/react-dom

3. TypeScript Dosyaları Kullanımı

React bileşenleri artık .tsx uzantısını kullanarak oluşturulur.

Fonksiyonel Bir React Bileşeni
import React from "react";
interface Props {
  ad: string;
  yas?: number;
}
const Merhaba: React.FC<Props> = ({ ad, yas }) => {
 return <h1>Merhaba, {ad}! {yas && `Yaşın: ${yas}`}</h1>;
};
export default Merhaba;

4. Projeyi Çalıştırma

npm start

React projeniz artık TypeScript desteğiyle çalışıyor! 

B) Node.js ile TypeScript Projesi Oluşturma

Node.js'de TypeScript kullanarak backend uygulamaları geliştirmek için şu adımları izleyebilirsiniz.

1. Yeni Proje Oluşturma

mkdir my-node-ts-app
cd my-node-ts-app
npm init -y

2. TypeScript ve Gerekli Bağımlılıkları Yükleme

npm install typescript ts-node @types/node --save-dev

3. TypeScript Konfigürasyonu (tsconfig.json)

Aşağıdaki komutla TypeScript yapılandırma dosyası oluşturabilirsiniz:

npx tsc --init

Oluşan tsconfig.json dosyasında bazı temel ayarlar:

{
  "compilerOptions": {
    "target": "ES6",
    "module": "CommonJS",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true
  }
}

4. TypeScript ile Basit Bir Node.js Sunucusu

Bir src/index.ts dosyası oluşturup içine aşağıdaki kodu yazabilirsiniz:

import http from "http";
const server = http.createServer((req, res) => {
  res.writeHead(200, { "Content-Type": "text/plain" });
  res.end("Merhaba, TypeScript ile Node.js!");
});
server.listen(3000, () => {
  console.log("Sunucu 3000 portunda çalışıyor...");
});

5. TypeScript Kodu Çalıştırma

Kodunuzu TypeScript ile çalıştırmak için:

npx ts-node src/index.ts

6. JavaScript’e Çevirme ve Çalıştırma

Önce TypeScript kodunu JavaScript’e derleyin:

npx tsc

Ardından oluşan JavaScript kodunu çalıştırın:

node dist/index.js

Artık TypeScript destekli bir Node.js projesi oluşturmuş oldunuz!

20. TypeScript’te "Decorator" Nedir ve Hangi Durumlarda Kullanılır?

Decorator Nedir?

Decorator (Dekoratörler), bir sınıfa veya sınıfın metodlarına, özelliklerine ve parametrelerine özel işlevler eklemek için kullanılır. TypeScript’te @decoratorName şeklinde tanımlanır ve metadata, logging, validasyon gibi işlemler için kullanılır.

Decorator Kullanımı İçin Ayarlar

Dekoratörleri kullanabilmek için tsconfig.json dosyanızda şu ayarı açmanız gerekir:

{
  "compilerOptions": {
    "experimentalDecorators": true
  }
}

TypeScript’te Farklı Decorator Kullanım Alanları

TypeScript’te 4 temel decorator türü vardır:

  1. Class Decorator (Sınıf Dekoratörü)
  2. Method Decorator (Metot Dekoratörü)
  3. Property Decorator (Özellik Dekoratörü)
  4. Parameter Decorator (Parametre Dekoratörü)

1) Class Decorator (Sınıf Dekoratörü)

Bir sınıfa özel özellikler eklemek için kullanılır.

function LogSinifi(target: Function) {
    console.log(`Sınıf oluşturuldu: ${target.name}`);
}
@LogSinifi
class Araba {
    constructor(public marka: string) {}
}

Çıktı:

Sınıf oluşturuldu: Araba

Ne işe yarar?

2) Method Decorator (Metot Dekoratörü)

Bir metot çağrıldığında belirli işlemleri gerçekleştirmek için kullanılır.

function LogMetot(target: any, key: string, descriptor: PropertyDescriptor) {
    const orijinalMetot = descriptor.value;
   descriptor.value = function (...args: any[]) {
        console.log(`Metot çağrıldı: ${key}, Parametreler: ${args}`);
        return orijinalMetot.apply(this, args);
    };
}
class HesapMakinesi {
    @LogMetot
    topla(a: number, b: number) {
        return a + b;
    }
}
const hesap = new HesapMakinesi();
console.log(hesap.topla(5, 3));

Çıktı:

Metot çağrıldı: topla, Parametreler: 5,3
8

Ne işe yarar?

3) Property Decorator (Özellik Dekoratörü)

Bir sınıfın özelliklerine özel işlemler eklemek için kullanılır.

function ReadOnly(target: any, key: string) {
    Object.defineProperty(target, key, {
        writable: false
    });
}
class Kullanici {
    @ReadOnly
    public email: string = "ornek@email.com";
}
const k = new Kullanici();
// k.email = "yeni@email.com"; // HATA! (ReadOnly olduğu için değiştirilemez)

Ne işe yarar?

4) Parameter Decorator (Parametre Dekoratörü)

Bir metodun parametresine dekoratör ekleyerek işlem yapmak için kullanılır.

function LogParametre(target: any, key: string, index: number) {
    console.log(`Metot: ${key}, Parametre İndeksi: ${index}`);
}
class API {
    getUser(@LogParametre id: number) {
        console.log(`Kullanıcı ID: ${id}`);
    }
}
const api = new API();
api.getUser(123);

Çıktı:

Metot: getUser, Parametre İndeksi: 0
Kullanıcı ID: 123

Ne işe yarar?

TypeScript, modern yazılım geliştirme dünyasında hata oranlarını minimize eden, ölçeklenebilir ve güvenli kod yazılmasını sağlayan güçlü bir araçtır. React ve Node.js gibi teknolojilerle uyumlu çalışması, büyük çaplı projelerde hız ve verimlilik sağlaması, onu günümüz yazılım geliştirme trendlerinde vazgeçilmez bir dil haline getirmiştir.

Bu yazıda paylaştığımız TypeScript mülakat soruları ve detaylı cevapları, yalnızca bir mülakatı geçmenize yardımcı olmakla kalmayacak, aynı zamanda TypeScript konusunda derinlemesine bilgi sahibi olmanızı sağlayacaktır. Eğer TypeScript öğrenmeye veya geliştirmeye devam etmek istiyorsanız, pratik yaparak ve gerçek dünya projelerinde kullanarak öğrendiklerinizi pekiştirebilirsiniz.

Katılımcılarımıza Tavsiyelerimiz
Daha Fazla