Özet - Type guards
- TypeScript kursu
- İleri seviye
- Ders 40/57
- 4 dk
Type guard'larla güvenli bir veri doğrulama katmanı yazarsın.
Özet - Type guards
type guard'lar, güvenli bir veri doğrulama katmanı oluşturmak için bir araya getirilebilir. User-defined guard is ile daraltma yapar; assertion function asserts ile throw ederek daraltır. Primitive guard'lar typeof ile ilkel türleri kontrol eder. Birlikte unknown bir girdiyi güvenli şekilde işlerler.
function isString(x: unknown): x is string {
return typeof x === "string";
}
function assertNumber(x: unknown): asserts x is number {
if (typeof x !== "number") throw new Error("not number");
}
function process(v: unknown): string {
if (isString(v)) return `string: ${v}`;
assertNumber(v);
return `number: ${v}`;
}Uygulama Veri doğrulama katmanı yaz
isString(x: unknown): x is string guard fonksiyonunu tanımla (typeof x === "string" ile). assertNumber(x: unknown): asserts x is number fonksiyonunu tanımla (typeof x !== "number" ise throw new Error("not number")). process(v: unknown): string fonksiyonunu yaz: eğer isString(v) true ise `string: ${v}` döndür; değilse assertNumber(v) çağır ve `number: ${v}` döndür. console.log(process("hello")) ve console.log(process(42)) ile sonuçları yazdır.
Başlangıç kodu
// isString guard fonksiyonunu tanımla (string predicate, typeof ile)
// assertNumber fonksiyonunu tanımla (asserts x is number, throw ile)
// process(v: unknown): string fonksiyonunu guard ve assert ile yaz
// process("hello") ve process(42) sonuçlarını yazdırÖrnek çözüm
function isString(x: unknown): x is string {
return typeof x === "string";
}
function assertNumber(x: unknown): asserts x is number {
if (typeof x !== "number") {
throw new Error("not number");
}
}
function process(v: unknown): string {
if (isString(v)) {
return `string: ${v}`;
}
assertNumber(v);
return `number: ${v}`;
}
console.log(process("hello"));
console.log(process(42));Beklenen çıktı
string: hello number: 42
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Type guard (is) ve assertion function (asserts) arasındaki temel fark nedir?
- Guard yalnızca sınıflarla çalışır
- Guard true/false döndürür, assertion throw yapar veya daraltır Doğru cevap
- Assertion yalnızca primitive türlerle çalışır
- İkisi de aynıdır
Açıklama: is ile type guard true/false döndürür ve if koşuluyla daraltır; asserts ile assertion function ya tamam olarak daraltır ya da throw yapar, if gerekmez.
2 assertNumber assertion
function assertNumber(x: unknown): ____ {
if (typeof x !== "number") throw new Error("not number");
}
function assertNumber(x: unknown): asserts x is number {
if (typeof x !== "number") throw new Error("not number");
}
Açıklama: asserts x is number dönüş türü, fonksiyon tamamlandığında x'in number olduğunu TypeScript'e söyler; throw yapılırsa daraltma olmaz.
3 Type guards özet eşleştirmesi
| Kavram | Anlamı |
|---|---|
is (type guard) |
true/false döndürür |
asserts (assertion) |
throw veya daraltma |
typeof |
ilkel tür kontrolü |
unknown |
guard ile güvenli daraltma |