Skip to main content

Type vs. Interface

Type isimlendirmesi ve Interface birbirlerine oldukça benzerler. Çoğu durumda birini diğeri yerinde kullanabilirsiniz, Interface'in sunduğu tüm özellikler type için de geçerlidir. Aralarındaki en büyük fark type'ın yeni propertyler için yeniden açılamayacağı ancak interface'in her zaman extendable olmasıdır.

  • Interface'i extend edebiliyoruz:
interface Animal {
name: string
}

interface Bear extends Animal {
honey: boolean
}

const bear = getBear()
bear.name
bear.honey
  • Intersection ile type'ı extend edebiliyoruz:
type Animal = {
name: string
}

type Bear = Animal & {
honey: boolean
}

const bear = getBear();
bear.name;
bear.honey;
  • Var olan Interface'e yeni alanlar ekleyebiliyoruz:
interface Window {
title: string
}

interface Window {
ts: TypeScriptAPI
}

const src = 'const a = "Hello World"';
window.ts.transpileModule(src, {});
  • Type'ı oluşturulduktan sonra değiştiremiyoruz:
type Window = {
title: string
}

type Window = {
ts: TypeScriptAPI
}

// Error: Duplicate identifier 'Window'. 🚨

Bu iki tip hakkında daha detaylı notlar olacak ama TS handbook'a göre type'a ihtiyacınız olana kadar interface kullanabilirsiniz.

Kaynaklar

TypeScript Handbook

Interfaces vs. Types in Typescript - devgenius.io