Brand tanımı
- TypeScript kursu
- İleri seviye
- Ders 18/57
- 4 dk
Intersection ile brand tanımlamayı öğrenirsin.
Brand tanımı
Brand yardımcı türü, temel türü bir intersection ve readonly özellik ile genişletir. Bu özellik çalışma zamanında erişilemez; yalnızca derleme zamanında türleri ayırt eder. B extends string kısıtı, her brand için benzersiz bir dize kullanmanızı sağlar.
type Brand<T, B extends string> = T & { readonly __brand: B };
type Email = Brand<string, "Email">;
const e: Email = "x@y.com" as Email;declare ile unique symbol
declare const ile benzersiz bir sembol tanımlayıp bunu brand alanı olarak kullanmak, markanın yanlışlıkla erişilmesini zorlaştırır. Sembol çalışma zamanında yoktur ama derleme zamanında türleri ayırt eder. Bu, daha güçlü bir kapsülleme sağlar.
declare const __brand: unique symbol;
type Brand<T, B> = T & { readonly [__brand]: B };
type UserId = Brand<string, "UserId">;
type OrderId = Brand<string, "OrderId">;
const uid = "u1" as UserId;
const oid: OrderId = uid; // hataUygulama unique symbol ile brand tanımla
declare const __brand: unique symbol; kullanarak brand sembolünü tanıt. Brand<T, B> yardımcı türünü [__brand] anahtarıyla intersection olarak tanımla. Bu yardımcıyı kullanarak Email türünü (string tabanlı) oluştur. Bir Email değeri "x@y.com" ile type assertion yaparak oluştur ve console.log ile yazdır.
Başlangıç kodu
// Çalışma zamanı kodu olmadan benzersiz brand sembolü tanıt
// Brand<T, B> yardımcı türünü sembol anahtarıyla tanımla
// Email türünü Brand ile oluştur
// Email değerini assertion ile oluştur ve yazdırÖrnek çözüm
declare const __brand: unique symbol;
type Brand<T, B> = T & { readonly [__brand]: B };
type Email = Brand<string, "Email">;
const email = "x@y.com" as Email;
console.log(email);Beklenen çıktı
x@y.com
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Brand yardımcı türünde B extends string kısıtının amacı nedir?
- Brand alanının çalışma zamanında görünür olmasını sağlamak
- Intersection işlemini devre dışı bırakmak
- Temel türü string ile sınırlamak
- Her brand için benzersiz bir dize işaret kullanmak Doğru cevap
Açıklama: B extends string kısıtı, her brand için farklı bir dize kullanmanızı sağlar; bu da UserId ve OrderId gibi türleri yapısal olarak birbirinden farklı kılar.
2 declare ile brand sembolü
// Çalışma zamanı kodu olmadan benzersiz brand sembolü:
____
type Brand<T, B> = T & { readonly [__brand]: B };
// Çalışma zamanı kodu olmadan benzersiz brand sembolü:
declare const __brand: unique symbol;
type Brand<T, B> = T & { readonly [__brand]: B };
Açıklama: declare const __brand: unique symbol çalışma zamanında değer üretmeden derleyiciye benzersiz bir sembol türü bildirir; marka yalnızca derleme zamanında kullanıldığından bu idealdir.
3 Brand tanımı parçaları
| Kavram | Anlamı |
|---|---|
Brand yardımcı türü |
intersection ile tanım |
B extends string |
her brand için benzersiz dize |
declare const __brand |
çalışma zamanı kodu yok |
unique symbol |
benzersiz derleme zamanı işareti |