Brand kullanımı
- TypeScript kursu
- İleri seviye
- Ders 19/57
- 4 dk
Brand'li türleri fonksiyonlarda kullanmayı öğrenirsin.
Brand'li parametreler
Brand'li türleri fonksiyon parametresi olarak kullanmak, yanlış türdeki değerlerin geçmesini engeller. Sıradan bir string yerine yalnızca doğru markaya sahip değer kabul edilir; bu, karışıklığı derleme zamanında yakalar.
type UserId = Brand<string, "UserId">;
function getUser(id: UserId) {
return `user ${id}`;
}
const uid = "u1" as UserId;
getUser(uid); // geçerli
getUser("u1"); // hata: plain string değilValidation ile marka oluşturma
Marka değerlerini güvenli şekilde oluşturmak için validation yapan yardımcı fonksiyonlar kullanılır. Bu fonksiyonlar girdiyi kontrol eder, geçerliyse as ile markalar ve döndürür; geçersizse hata fırlatır. Böylece marka yalnızca geçerli değerlerle oluşturulur.
type Email = Brand<string, "Email">;
function makeEmail(s: string): Email {
if (!s.includes("@")) throw new Error("geçersiz email");
return s as Email;
}
const e = makeEmail("a@b.com"); // geçerliUygulama Validation yardımcısı ile marka oluştur
Brand<T, B> yardımcı türünü intersection ile tanımla (string brand kullan). UserId türünü oluştur. makeUserId(s: string): UserId fonksiyonu yaz: boş string kontrolü yap, geçerse as UserId ile döndür, değilse throw new Error("empty"). makeUserId("u1") ile bir değer oluştur ve console.log ile yazdır.
Başlangıç kodu
// Brand<T, B> yardımcı türünü intersection ile tanımla
// UserId türünü Brand ile oluştur
// makeUserId fonksiyonunu validation ile yaz
// makeUserId("u1") ile değer oluştur ve yazdırÖrnek çözüm
type Brand<T, B extends string> = T & { readonly __brand: B };
type UserId = Brand<string, "UserId">;
function makeUserId(s: string): UserId {
if (s.length === 0) throw new Error("empty");
return s as UserId;
}
const uid = makeUserId("u1");
console.log(uid);Beklenen çıktı
u1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Aşağıdakilerden hangisi brand'li bir fonksiyon parametresinin sağladığı güvenliktir?
- String değerlerin otomatik olarak markaya dönüştürülmesi
- Yanlış markaya sahip değerlerin derleme zamanında reddedilmesi Doğru cevap
- Fonksiyonun daha hızlı çalışması
- Çalışma zamanında marka kontrolü yapılması
Açıklama: Brand'li parametreler derleme zamanında tür güvenliği sağlar; yanlış markaya sahip değerler (örneğin OrderId'yi UserId parametresine) derleme hatası verir.
2 Validation ile marka değeri döndür
type Brand<T, B extends string> = T & { readonly __brand: B };
type UserId = Brand<string, "UserId">;
function makeUserId(s: string): UserId {
if (s.length === 0) throw new Error("boş");
return s ____;
}
type Brand<T, B extends string> = T & { readonly __brand: B };
type UserId = Brand<string, "UserId">;
function makeUserId(s: string): UserId {
if (s.length === 0) throw new Error("boş");
return s as UserId;
}
Açıklama: Validation geçtikten sonra as UserId ile değer markalanır ve döndürülür; bu, markanın yalnızca geçerli girdilerle oluşturulmasını sağlar.
3 Brand kullanımı parçaları
| Kavram | Anlamı |
|---|---|
Brand'li parametre |
yanlış markayı derleme zamanında reddeder |
as UserId |
validation sonrası markalama |
makeUserId(s) |
validation ve marka oluşturma |
getUser("u1") |
derleme hatası (plain string) |