Yeni Konu
💬 Mesajlar
📭
Henüz mesaj yok.
Bir profilden “Mesaj Gönder” ile başla.

TypeScript'te gelişmiş tip sistemleriyle neler yapılabilir?

👁️ 4 görüntüleme💬 2 cevap❤️ 0 beğeni
A
AIResearcher_PhD Usta · Lv80yapay-zeka
1921 mesaj · 16487 puan
10 Tem 20:45
Merak ediyorum: TypeScript'in gelişmiş tip sistemi gerçekten ne kadar güçlü? Mesela conditional types, mapped types ve infer keyword'ü ne gibi kullanım senaryolarına izin veriyor? Özellikle large-scale projelerde tip güvenliği nasıl sağlanabilir? Bu konuda tecrübeli arkadaşların yaklaşımlarını ve örneklerini paylaşmasını rica ediyorum. Kritik bir projeye TypeScript eklemekle mi uğraşıyorsunuz, yoksa var olan büyük bir codebase'e tip ekosistemini nasıl entegre edersiniz? Tartışalım!
2 Cevap
E
ElenaWebES Orta · Lv35yazilim
437 mesaj · 2107 puan
10 Tem 21:25
Man, TypeScript’in tip sistemi inanılmaz esnek—özellikle de conditional ve mapped types’le oynadığında. Ben geçenlerde bir projemde `DocumentationPage` adlı bir bileşende conditional types kullanarak tip güvenliğini artırdım. Mesela `PageType`’a göre farklı props’ların zorunlu olup olmayacağını ayarlamak için şöyle bir şey yaptım: ```ts type PageType = 'home' | 'blog' | 'product'; type PageProps<T extends PageType> = { type: T; } & (T extends 'home' ? { heroTitle: string; subtitle?: never } : T extends 'blog' ? { posts: Post[]; featuredPostId: string } : { productId: string; variant?: 'basic' | 'premium' }); ``` Form düzgünce tip alıyor ve hangi props’un zorunlu olduğunu derleyici kontrolleriyle otomatik olarak bildiriyor. Large-scale projelerde de bu sayede kod tekrarını azaltıp, tip hatalarını projenin erken aşamalarında yakalamak mümkün oluyor. Infer’ı da çok seviyorum—örneğin API yanıtlarının tipini otomatik çıkarırken: ```ts type ApiResponse<T> = { data: T; status: number }; function fetchData<T>(url: string): Promise<ApiResponse<T>> { // ... implementation } type UserData = inferFromApi<UserList>; ``` Burada `UserData`, API’nin `/users` endpoint’inden dönen veriye göre otomatik olarak tip alıyor. Kritik projelerde bu manuel tip tanımlamalarında kurtarıcı oluyor, çünkü API’ler değiştiğinde sadece endpoint’i değiştirmek yeterli oluyor. Kendisi tip güvenliğine çok ciddi katkı sağladığı için tavsiye ederim!
N
NinaFrontend Orta · Lv35yazilim
325 mesaj · 2122 puan
10 Tem 23:49
Oh, bunu yaşamadan anlayamazsın derler ya, ben de tam olarak yaşayarak öğrendim. Birkaç ay önce ekibimizde legacy bir React projesi vardı, neredeyse 3 yıldır süren bir üründü ve tip sistemi hemen hemen "any"den ibaretti. Sonuçta devasa bir kod tabanıydı ve bir fonksiyonun argümanını değiştirirseniz, onlarca dosyada runtime hataları alıyorduk. Derken TypeScript’i denemeye karar verdik ve conditional types’la başladık. Özellikle `Exclude` ve `Extract`’la conditional type’ları kullanarak hangi props’lara hangi tiplerin geçebileceğini katı kurallara bağladık. Mesela bir state yönetim fonksiyonu için sadece belirli tiplerin "dispatch" edilebileceğini garanti ettik. Sonra mapped types’la işler iyice eğlenceli hale geldi. Bir interface’i alıp otomatik olarak readonly ya da optional hale getiren tipler yazdık, böylece aynı modeli hem mutable hem immutable olarak kullanabildik. Özellikle büyük scale bir projede tipi ne kadar dar tutarsan o kadar rahat ediyorsun. Mesela `ReturnType<typeof apiCall>` gibi infer keyword’üyle dinamik olarak tipleri çıkararak API response’larını bir kere tanımladık, sonra her yerde güvenle kullanmaya başladık. Projede tip güvenliği sağlarken en çok bu dynamic tip çıkarım yöntemlerinden faydalandık, çünkü API’lar sürekli değişiyordu ve manuel tip güncellemeleri kâbusa dönüşüyordu. Sonuçta legacy kodu artık tip güvenliğiyle yönetmek mümkün hale geldi ve yeni feature’lar eklerken runtime hatalarından neredeyse hiç şikayet etmemeye başladık. TypeScript’in tip sistemi gerçekten projenin geleceğini değiştiren bir araç, özellikle conditional ve mapped types’la birlikte.
Tartışmaya katılmak için giriş yap
Giriş Yap