Özet - Type narrowing
- TypeScript kursu
- İleri seviye
- Ders 28/57
- 4 dk
Daraltmayla bir karışık veri ayrıştırıcı yazarsın.
Özet - Type narrowing
Type narrowing, bir union türünü belirli bir dalda alt türe indirmektir. typeof ilkel türleri, in nesne özelliklerini, instanceof sınıfları daraltır. Doğru aracı seçmek veriye bağlıdır: ilkel değerler için typeof, farklı şekillerdeki nesneler için in, sınıf örnekleri için instanceof kullanılır.
type Data = string | number | { name: string } | Error;
function describe(d: Data): string {
if (typeof d === "string") return `string: ${d}`;
if (typeof d === "number") return `number: ${d}`;
if (d instanceof Error) return `error: ${d.message}`;
if ("name" in d) return `object: ${d.name}`;
return "unknown";
}Uygulama Karışık veri ayrıştırıcı yaz
Data = string | number | { name: string } | Error türünü tanımla. describe(d: Data): string fonksiyonunu yaz. Sırayla: typeof d === "string" ise `string: ${d}` döndür; typeof d === "number" ise `number: ${d}` döndür; d instanceof Error ise `error: ${d.message}` döndür; değilse `object: ${d.name}` döndür. console.log(describe("hello")), console.log(describe(42)), console.log(describe({ name: "table" })) ile sonuçları yazdır.
Başlangıç kodu
// Data türünü tanımla: string | number | { name: string } | Error
// describe(d: Data): string fonksiyonunu sırayla typeof, typeof, instanceof, else ile yaz
// describe("hello"), describe(42), describe({ name: "table" }) sonuçlarını yazdırÖrnek çözüm
type Data = string | number | { name: string } | Error;
function describe(d: Data): string {
if (typeof d === "string") return `string: ${d}`;
if (typeof d === "number") return `number: ${d}`;
if (d instanceof Error) return `error: ${d.message}`;
return `object: ${d.name}`;
}
console.log(describe("hello"));
console.log(describe(42));
console.log(describe({ name: "table" }));Beklenen çıktı
string: hello number: 42 object: table
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Aşağıdaki daraltma yöntemlerinden hangisi sınıf örnekleri için uygundur?
- typeof
- instanceof Doğru cevap
- ===
- in
Açıklama: Sınıf örneklerini daraltmak için instanceof kullanılır; prototip zincirini kontrol eder ve doğru sınıfa daraltır. typeof nesneler için yalnızca "object" döner, sınıf adını vermez.
2 Doğru daraltma aracı
type Data = string | { name: string };
function label(d: Data): string {
if (____) {
return d;
}
return d.name;
}
type Data = string | { name: string };
function label(d: Data): string {
if (typeof d === "string") {
return d;
}
return d.name;
}
Açıklama: İlkel string değerini daraltmak için typeof kullanılır; d instanceof string hata verir çünkü string ilkel bir değerdir ve constructor değildir.
3 Type narrowing özet eşleştirmesi
| Kavram | Anlamı |
|---|---|
typeof |
ilkel türleri daraltır |
in operatörü |
nesne özelliklerine göre daraltır |
instanceof |
sınıflara göre daraltır |
Daraltma (narrowing) |
union türünü dala indirir |