Modül dersleri (2/2)
Değişmez Türler ve İddialar
TypeScript, değişkenlerin olası değerlerini daraltmak ve gerektiğinde derleyiciyi daha spesifik türleri tanımaya zorlamak için gelişmiş araçlar sağlar.
Değişmez Türler
Değişmez tür, tam ve tek bir değeri temsil eder (örneğin, belirli bir dize veya sayı). Genellikle sendika türleriyle birleştirilirler:
type TrafficLight = 'red' | 'yellow' | 'green';
let light: TrafficLight;
light = 'red'; // OK
light = 'blue'; // Error: "blue" is not assignable to TrafficLightİddiaları Yazın (as)
Bazen derleme zamanında TypeScript'in bilemeyeceği bir tür hakkında bilgiye sahip olursunuz. Bu durumlarda, as anahtar sözcüğünü kullanarak bir tür iddiası kullanabilirsiniz:
const myCanvas = document.getElementById('main_canvas') as HTMLCanvasElement;İddia derleyiciye şunu söyler: "Güven bana, bu öğenin bir HTMLCanvasElement olduğunu biliyorum". Çalışma zamanında herhangi bir kontrol veya yayın gerçekleştirmez; yalnızca tür denetleyiciye yardımcı olur.
Sabit İddialar (as const)
const ile bir nesneyi veya diziyi bildirdiğimizde, TypeScript yine de onun dahili özelliklerinin değiştirilmesine izin verir. Sona as const eklendiğinde tüm yapı dondurulur ve salt okunur hale getirilir, tüm özellikler tam olarak gerçek türlerine dönüştürülür:
const colors = ['red', 'green', 'blue'] as const;
// colors[0] = "yellow"; // Error: array is read-onlyŞablon Değişmez Türleri
Şablon değişmez türleri, JavaScript şablon dizelerinin üzerine kuruludur ancak tür konumlarında kullanılır. Birden fazla değişmez türün tek bir türde birleştirilmesine izin verirler:
type Size = 'small' | 'large';
type Color = 'red' | 'blue';
// Creates the union: "small-red" | "small-blue" | "large-red" | "large-blue"
type ItemId = `${Size}-${Color}`;Şablon Değişmez Türlerindeki Dize Yardımcı Programları
TypeScript, Şablon Değişmez Türleri içindeki karakterleri değiştirmek için özel yardımcı program türleri sağlar:
Capitalize<StringType>: Dizenin ilk harfini büyük harfe çevirir.Uncapitalize<StringType>: Dizenin ilk harfini kaldırır.Uppercase<StringType>: Dizenin tamamını büyük harfe dönüştürür.Lowercase<StringType>: Dizenin tamamını küçük harfe dönüştürür.
type ActionType = 'click' | 'hover';
// Generates: "onClick" | "onHover"
type EventHandlers = `on${Capitalize<ActionType>}`;Kendin dene
Alıştırma 1: Yön Değişmez Birliği
Yalnızca 'yukarı', 'aşağı', 'sol' veya 'sağ' dizelerini kabul eden Yön adında bir değişmez tür tanımlayın. Ardından, 'Moving' dizesini ve ardından alınan yönü döndüren move(dir: Direction): string adında bir işlev bildirin.
İpucu göster
Önce | ile ayrılmış dört seçenekle tür takma adını tanımlayın, ardından parametreye ve dönüş türüne açıklama ekleyerek taşıma işlevini bildirin.
3 denemeden sonra çözüm mevcut
Alıştırma 2: JSON.parse ile ilgili iddia
JSON.parse işlevi varsayılan olarak herhangi bir türü döndürür. JSON.parse(json) sonucunun as anahtar sözcüğünü kullanarak type { kullanıcı adı: string } olarak onaylanması için parseUser işlevini değiştirin.
İpucu göster
JSON.parse(json) çağrısından hemen sonra 'as { kullanıcı adı: string }' ifadesini ekleyin.
3 denemeden sonra çözüm mevcut
Alıştırma 3: Etkinlikler için Şablon Literatürleri
Durum ve Eylem türleri göz önüne alındığında, 'Durum-Eylem' biçiminde Olay adlı bir şablon dizesi türü tanımlayın (örneğin, 'açık tıklama').
İpucu göster
Türü ve içindeki ${Status}-${Action} sözdizimini tanımlamak için geri tıklamaları kullanın.
3 denemeden sonra çözüm mevcut
Alıştırma 4: Büyük Harflerle Şablon Değişmez Türü
'Tıklama' veya 'üzerine gelme' olabilen değişmez türde bir Olay tanımlayın. Ardından, büyük harfle yazılan olay adının (ör. 'onClick' veya 'onHover') ardından gelen biçimindeki dizeleri temsil eden bir EventHandler türünü bildirmek için Şablon Değişmez Türlerini kullanın.
İpucu göster
Olayın ilk harfini büyük harf yapmak için şablon değişmezinin içinde Capitalize<Event> öğesini kullanın.
3 denemeden sonra çözüm mevcut