Phantom type nedir?
- TypeScript kursu
- İleri seviye
- Ders 21/57
- 4 dk
Hayali tür parametreleriyle güvenliği öğrenirsin.
Phantom type nedir?
Phantom type, generic tür parametresi olarak tanımlanıp türün gövdesinde hiç kullanılmayan parametredir. Bu parametre yalnızca tür düzeyinde bilgi taşır; çalışma zamanında karşılığı yoktur. Amacı, aynı yapıya sahip değerleri farklı türler olarak işaretlemek ve böylece yanlış kullanımları derleme zamanında yakalamaktır.
type Order<T> = { amount: number };
// T parametresi gövdede kullanılmıyor: phantom
type PendingOrder = Order<"pending">;
type PaidOrder = Order<"paid">;Phantom ile nominal benzerlik
Phantom parametre, branded type'daki işaretçi alanının yerini alır. Aynı yapıya sahip iki değer farklı phantom argümanlarla farklı türler olur; bu sayede derleme zamanında karıştırılmaları engellenir. Çalışma zamanında değerler özdeştir.
type Order<T> = { amount: number };
const pending: Order<"pending"> = { amount: 10 };
const paid: Order<"paid"> = { amount: 10 };
const x: Order<"paid"> = pending; // hata: türleri farklıUygulama Phantom ile iki tür ayır
Order<T> adında, T parametresini gövdede kullanmayan bir generic tür tanımla (gövdede amount: number olsun). PendingOrder ve PaidOrder türlerini phantom argümanlarla oluştur. Her türden bir değer oluştur ve console.log ile her ikisinin amount değerini yazdır.
Başlangıç kodu
// Order<T> generic türünü tanımla (T gövdede kullanılmasın)
// PendingOrder ve PaidOrder türlerini phantom argümanlarla oluştur
// Her türden bir değer oluştur ve amount değerlerini yazdırÖrnek çözüm
type Order<T> = { amount: number };
type PendingOrder = Order<"pending">;
type PaidOrder = Order<"paid">;
const pending: PendingOrder = { amount: 10 };
const paid: PaidOrder = { amount: 20 };
console.log(pending.amount);
console.log(paid.amount);Beklenen çıktı
10 20
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Phantom type parametresi hangi özelliğe sahiptir?
- Derleme zamanında yok sayılır
- Türün gövdesinde hiç kullanılmaz Doğru cevap
- Çalışma zamanında bir değer taşır
- Yalnızca sınıflarda kullanılabilir
Açıklama: Phantom parametre generic olarak bildirilir ama türün gövdesinde hiç kullanılmaz; bu yüzden yalnızca tür düzeyinde işaret olarak çalışır.
2 Phantom type gövdesi
type Order<T> = { ____ }; // T gövdede yok: phantom
type Order<T> = { amount: number }; // T gövdede yok: phantom
Açıklama: amount: number özelliği T parametresini kullanmaz; bu yüzden T phantom olarak kalır ve farklı argümanlar farklı türler oluşturur.
3 Phantom type parçaları
| Kavram | Anlamı |
|---|---|
Generic parametre |
tür gövdesinde kullanılmaz |
Phantom type |
yalnızca tür düzeyinde işaret |
Farklı phantom argümanlar |
farklı türler oluşturur |
Çalışma zamanı |
phantom parametre yok |