Union Tipler ile Çalışmak
Coddy'nin JavaScript Journey'sinin TypeScript'e Giriş bölümünün bir parçası — ders 32 / 73.
Union tipleriyle çalıştığınızda, TypeScript önemli bir güvenlik kuralını zorunlu kılar: yalnızca union içindeki tüm tiplerde mevcut olan özelliklere ve metotlara erişebilirsiniz. Bu, çalışma zamanı (runtime) hatalarını önler ancak tipe özgü özelliklere erişmek için özel tekniklere ihtiyacınız olduğu anlamına gelir.
Hem bir dizeyi (string) hem de dize dizisini (array of strings) kabul eden bir fonksiyon düşünün. Her iki tür de bir length özelliğine sahiptir, bu nedenle bu özelliğe güvenle erişebilirsiniz:
function getLength(input: string | string[]): number {
return input.length; // Safe - both types have length
}Ancak, yalnızca bir türde bulunan bir yöntemi kullanmaya çalışırsanız, TypeScript bir hata gösterecektir. Türe özgü üyelere güvenli bir şekilde erişmek için bir type guard'a (türü daraltan bir çalışma zamanı kontrolü) ihtiyacınız vardır:
function processInput(input: string | string[]): void {
if (typeof input === "string") {
// TypeScript burada input'un bir string olduğunu bilir
console.log(input.toUpperCase());
} else {
// TypeScript burada input'un string[] olduğunu bilir
console.log(input.join(", "));
}
}typeof operatörü en yaygın tür korumalarından (type guards) biridir. Kontrolden sonra, TypeScript her bir dal içindeki türü otomatik olarak daraltır ve tam tür güvenliğini korurken size türe özgü özelliklere ve yöntemlere tam erişim sağlar.
Görev
Kolaystring | string[] tipinde input adında bir parametre kabul eden ve bir number döndüren processData adında bir fonksiyon oluşturun. Fonksiyon, girdi tipini belirlemek için bir tip koruması (type guard) kullanmalı ve şu şekilde davranmalıdır:
- Eğer girdi bir
stringise, uzunluğunu döndürün - Eğer girdi bir
string[]ise, dizideki tüm dizelerin toplam karakter sayısını döndürün
number | boolean tipinde content adında bir parametre kabul eden ve bir string döndüren formatMessage adında başka bir fonksiyon oluşturun. Fonksiyon, girdi tipini belirlemek için bir tip koruması (type guard) kullanmalı ve şu şekilde davranmalıdır:
- Eğer girdi bir
numberise,"Value: [number]"döndürün - Eğer girdi bir
booleanise,"Status: [boolean]"döndürün
Aşağıdaki girdiler sağlanacaktır:
- Birinci girdi: tek bir kelimeyi veya
["apple", "banana", "cherry"]gibi dizelerden oluşan bir JSON dizisini temsil eden bir dize - İkinci girdi: bir sayıyı veya bir boolean değeri (
"true"veya"false") temsil eden bir dize
Girdileri şu şekilde işleyin:
- Birinci girdi için: eğer
"["ile başlıyorsa, onu bir JSON dize dizisi olarak ayrıştırın; aksi takdirde, onu tek bir dize olarak ele alın - İkinci girdi için: eğer
"true"veya"false"ise, onu bir boolean değere dönüştürün; aksi takdirde, bir sayıya dönüştürün
İşlenmiş birinci girdi ile processData fonksiyonunu çağırın ve sonucu yazdırın. Ardından işlenmiş ikinci girdi ile formatMessage fonksiyonunu çağırın ve sonucu yazdırın.
Kendin dene
import * as fs from "fs";
// Girdileri oku
const stdinBuffer: Buffer = fs.readFileSync(0);
const inputs: string[] = stdinBuffer.toString().trim().split('\n');
const firstInput = inputs[0];
const secondInput = inputs[1];
// TODO: Kodunuzu buraya yazın
// Tip korumalı (type guard) processData fonksiyonunu oluşturun
// Tip korumalı (type guard) formatMessage fonksiyonunu oluşturun
// Girdileri gereksinimlere göre işleyin
// Fonksiyonları çağırın ve sonuçları yazdırınBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
TypeScript'e Giriş bölümündeki tüm dersler
1TS ile Başlarken
TypeScript Nedir?Neden TypeScript Kullanılır?İlk TypeScript KodunuzDerleme Süreci ve HatalarÖzet: TS'ye Giriş4Fonksiyonlarla Çalışmak
Parametre ve Dönüş Değerlerini TiplendirmeArrow Fonksiyonlarını Tiplendirme'void' Dönüş Tipi'?' ile Opsiyonel ParametrelerVarsayılan Parametre DeğerleriRest Parametrelerini TiplendirmeFonksiyon Tiplerini TanımlamaÖzet: Tiplendirilmiş Fonksiyonlar Oluşturma2Temel Tipler
Temel Tipler: str, num, boolean'any' Tipi: Kaçış Yolu'unknown' Tipi'null' ve 'undef' ile ÇalışmakTip Çıkarımı İş BaşındaAçık Tip BelirlemeleriÖzet: Temel Tipler Pratiği5Tipler: Takma Adlar, Unionlar ve Kesişimler
İlkel Tipler için Tip Takma AdlarıUnion Tipler ('|')Union Tipler ile ÇalışmakLiteral TiplerKesişim Tipleri ('&')Tip Takma Adlarını BirleştirmeÖzet: Gelişmiş Tip Kombinasyonları3Veri Yapısı: Diziler ve Tuple
Tipli DizilerDiziler için 'readonly' BelirleyicisiTuple Nedir?Tuple Tanımlama ve ErişmeTuple DestructuringReadonly Tuple'larÇok Boyutlu Tipli DizilerDizilerle Spread OperatörüÖzet: Diziler ve Tuple'lar6Nesneleri ve Interface'leri Tiplendirme
Satır İçi Nesne Tipi BelirtimleriNesneler için Type Alias KullanımıInterface'lere GirişInterface'ler ve Type Alias'ların KarşılaştırılmasıOpsiyonel ve Readonly ÖzelliklerInterface ve Tipleri GenişletmeInterface'lere Metot EklemeÖzet: Nesne Yapılarını Tanımlama