Nesne Tipleri & Enum'lar
Nesne Tipleri & Enum'lar: Object type, bir kargo formuna benzer bir sözleşmedir — 'bu pakette mutlaka alıcı adı, takip kodu ve ağırlık olmalı' der; biri eksikse koli kargoya hiç
Object type, bir kargo formuna benzer bir sözleşmedir — 'bu pakette mutlaka alıcı adı, takip kodu ve ağırlık olmalı' der; biri eksikse koli kargoya hiç verilmez. Peki bu kontrolü neden çalışma zamanında (paket fiilen elden çıktığında) değil de daha önce yapalım? Çünkü eksik alanı depoda fark etmek, müşteriye ulaştıktan sonra fark etmekten çok daha ucuzdur — Java'da bu sözleşme zaten bir interface veya class ile zorunluydu, TypeScript aynı garantiyi düz JavaScript nesnelerine sonradan ekliyor. QA'da somut karşılığı şudur: bir test sonucu nesnesinde `duration` alanı unutulduğunda, plain JavaScript'te bu hata raporlama aşamasında 'undefined ms' gibi sessiz bir görüntüyle fark edilmeden geçer; object type kullanan TypeScript kodunda aynı eksiklik, kodu commit etmeden önce derleyici tarafından söylenir.
Micro Lab: TypeScript kod yazma
TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.
Nesne tipi anatomisi
function foo(obj: { name: string; age: number }) — küçük tek kullanımlık yapılar için
timeout?: number — alan bulunmayabilir, undefined ile başlar
readonly id: number — Java'daki final gibi, bir kez atandıktan sonra değiştirilemez
Nesne tipi özelliklerini tip güvenliği sırasına koy:
readonly — değişmez garanti
required alan — her zaman mevcut
optional? — bulunabilir veya undefined
index signature [key: string] — dinamik
type Config = { baseUrl: string; timeout?: number } tanımında timeout alanı belirtilmeden nesne oluşturulursa ne olur?
Geçerlidir — timeout undefined olur (opsiyonel '?' sayesinde)