Middle
TypeScript'te ne zaman türleri, ne zaman arayüzleri kullanmalısınız?
sobes.tech yapay zeka
AI'dan gelen yanıt
Türleri (type) kullanmak için:
- Birlikler (unions) ve kesişimler (intersections):
type Status = "pending" | "completed" | "failed"; type UserWithAddress = User & Address; - İlkel türler ve literal'lar:
type ID = string | number; type Direction = "up" | "down" | "left" | "right"; - Diziler (tuples):
type RgbColor = [number, number, number]; - Mevcut türler için alias'lar oluşturma:
type StringOrNumber = string | number; - Koşullu türler (conditional types):
type TypeOfProp<T, K extends keyof T> = T[K];
Arayüzler (interface) kullanmak için:
- Nesne yapısının tanımı:
interface User { id: number; name: string; age?: number; // Opsiyonel özellik } - Sınıflar tarafından uygulanması (implements):
interface Logger { log(message: string): void; } class ConsoleLogger implements Logger { log(message: string) { console.log(message); } } - Diğer arayüzleri genişletmek (extends):
interface Person { name: string; } interface Employee extends Person { employeeId: number; } - Deklaratif birleşme (declaration merging): Bu, mevcut bir arayüzü yeniden bildirerek genişletmeye izin verir. Türler için bu mümkün değildir.
interface Box { width: number; } interface Box { // Bu, Box arayüzüne height özelliğini ekleyecektir height: number; }
Kısa karşılaştırma:
| Özellik | type |
interface |
|---|---|---|
| Birlik türleri | Evet | Hayır |
| Kesişim türleri | Evet | Hayır |
| İlkel türler/literal'lar | Evet | Hayır |
| Tuple'lar | Evet | Hayır |
| Tür alias'ları | Evet | Hayır |
| Koşullu türler | Evet | Hayır |
| Nesne tanımı | Evet | Evet |
| Sınıf uygulaması | Hayır | Evet |
| Genişletme | Evet (& kullanarak) |
Evet (extends kullanarak) |
| Deklaratif birleşme | Hayır | Evet |
Genel olarak, nesne yapısını tanımlamak için interface kullanmak tercih edilir, çünkü nesne yönelimli yaklaşıma daha uygundur ve deklaratif birleşmeyi destekler. Diğer tüm durumlar, özellikle mevcut türleri birleştirme ve yeni türler oluşturma konusunda, type daha esnektir.