Modül dersleri (2/2)
Diziler ve Tuple'lar
JavaScript'te diziler her türlü öğeyi içerebilir ve dinamik olarak büyüyüp küçülebilir. TypeScript, koleksiyonların homojen kalmasını veya sabit bir tür yapısına uymasını sağlamak için statik tür denetimi ekler.
Diziler (Homojen Koleksiyonlar)
TypeScript'te aynı türdeki öğeleri içeren bir dizinin türünü tanımlamanın iki eşdeğer yolu vardır:
-
Eleman tipini ve ardından köşeli parantezleri (
[]) kullanarak:TSconst numbers: number[] = [1, 2, 3]; const strings: string[] = ['a', 'b', 'c']; -
Genel
Array<T>türünü kullanarak:TSconst numbers: Array<number> = [1, 2, 3];
Her iki sözdizimi de tamamen geçerlidir, ancak ilki (type[]) geleneksel ve en yaygın stildir. Geçersiz bir değer eklemeye çalışırsanız (örneğin, number[] dizisinde numbers.push("hello")), TypeScript bir derleme zamanı hatası üretecektir.
Demetler (Sabit Uzunluklu Diziler)
Tuple, sabit sayıda öğeye sahip özel bir dizi türüdür; burada her öğe, konumuna bağlı olarak önceden tanımlanmış belirli bir türe sahiptir.
Örneğin, bir durum kodu (sayı) ve bir mesajdan (dize) oluşan bir HTTP yanıtını depolamak için:
const response: [number, string] = [200, 'OK'];Bu durumda:
- İlk öğe (
response[0]) birnumberolmalıdır. - İkinci öğe (
response[1]) birstringolmalıdır. - Dizi tam olarak 2 öğeyle başlatılmalıdır.
Salt Okunur Tuple'lar (readonly)
TypeScript'teki tuple'larla ilgili önemli bir ayrıntı, çalışma zamanında normal JavaScript dizileri olmalarıdır. Bu, .push() veya .pop() gibi değiştirici yöntemlerin teknik olarak mevcut olduğu ve tür kontrollerini kısmen atlayarak demet uzunluğunu değiştirebileceği anlamına gelir.
Bu davranışı önlemek ve gerçek değişmezliği uygulamak için readonly değiştiricisini kullanabiliriz:
const point: readonly [number, number] = [10, 20];
// point.push(30); // Compile-time error!Kendin dene
Alıştırma 1: Sayı Dizisi
Yalnızca sayıları içeren ve 90, 85 ve 95 değerleriyle başlatılan, puanlar adlı bir dizi bildirin. Dizi için açık tür ek açıklamasını kullanın. Herhangi bir türü kullanmayın.
İpucu göster
Sözdizimi const puanlarını kullanın: sayı[] = ... veya Array<sayı>.
3 denemeden sonra çözüm mevcut
Alıştırma 2: 3B Koordinat Tuple'ı
3 boyutlu bir koordinatı (X, Y, Z için üç sayı) temsil eden ve 10, 20, 30 değerleriyle başlatılan bir demet adlı nokta bildirin. Açık tür açıklaması kullanın.
İpucu göster
Demet türü [sayı, sayı, sayı] olmalıdır.
3 denemeden sonra çözüm mevcut
Alıştırma 3: Konum Bilgisi Tuple'ı
Adıyla birlikte bir coğrafi koordinatı temsil eden,locationInfo adlı bir tanımlama grubu bildirin. Şunları içermelidir: enlem (sayı), boylam (sayı) ve şehir adı (dize). Bunu 41.9028, 12.4964 ve 'Rome' değerleriyle başlatın.
İpucu göster
Üç öğeli bir demet tanımlamak için sözdizimini kullanın: [sayı, sayı, dize].
3 denemeden sonra çözüm mevcut
Alıştırma 4: Günlük Girişi Tuple'ı
Bir günlük satırını temsil eden logEntry adlı bir tanımlama grubu bildirin. Sırayla şunları içermelidir: bir zaman damgası (sayı), bir önem düzeyi (dize) ve bir hata mesajı (dize). Zaman damgası 1716300000, 'BİLGİ' düzeyi ve 'Uygulama başladı' mesajıyla başlatın.
İpucu göster
Üç öğeli bir tanımlama grubu tanımlamak için sözdizimini kullanın: [sayı, dize, dize] ve belirtilen değerleri atayın.
3 denemeden sonra çözüm mevcut