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.