TypeScript
Brand kullanımı
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ğil
Validation 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çerli
Uygulama 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.
Örnek çözümü göster
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);
Kendini test et
-
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
- Fonksiyonun daha hızlı çalışması
- Çalışma zamanında marka kontrolü yapılması
Cevabı göster
Yanlış markaya sahip değerlerin derleme zamanında reddedilmesi — 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.
-
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 ____;
}
Cevabı göster
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;
}
-
Brand kullanımı parçaları
- 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)
Sıradaki ders: Özet - Branded types