Mapped Types
Last updated
Last updated
Diyelim ki elimizde aşağıdaki gibi bir tip objesi var
ve bu biz objedeki tüm optional parametre ifadesi olan ?
lerini kaldırmak istiyoruz. Ne yaparsınız ? Tek tek mi değiştirirsiniz ? Yoksa bunu yapan bir yöntem var mıdır ? İşte TypeScript in mapped types özelliği burada devreye giriyor.
[Propery in Type ] : type
syntax i ile tip nesnesi içerisinde property lerini map edebiliyoruz. Okuyunca çok karışık oldu haklısınız. En iyi yine örnekler açıklayalım.
Şeklinde bir tanımlamamız olsun. Yeni bir tip tanımlamak istiyorum, key leri Properties objesinde ki keyler olsun, tip değerleri de number olmasını istiyorum. Bunu yapmak için Mapped type özelliğini kullanabilirim.
Aşağıdaki örneği inceleyelim.
NewType tipinin karşılığı aşağıdaki gibidir.
[P in keyof T]
nin hemen yanında -?
var. -?
optional parametre özelliğini kaldırmamıza yarıyor.
T[P]
ise type objemizde ki keylerin sırasıyla karşılığındaki tipleri bize veriyor. Örneğin aşağıdaki gibi bir I isimli interface miz olsun.
type PropertyA: I['a']
nın karşılığı nedir ? Doğru cevap gözlerinizi aşağıya kaydırmanız yeterli 😀
Tekrardan T[P]
i açıklamaya dönelim. Bu durumda T[P]
karşılığı, T objesinde ki her key in tip karşılığı olucaktır.
Yapılan işlem sonrası type MappedArtistForEdit
in karşılığı aşağıdaki gibi olacaktır.
Gelelim işleri biraz daha karıştırmaya. Sayfanın en başında aşağıdaki i oluşturmuştuk. Mapped Type özelliğini kullanarak özelliğini içerisindeki tüm elemanlardan kaldırmak istiyorum.
Öncelikle mapped type özelliğini kullanabileceğim bir type oluşturuyorum ve burada mapped type özelliğini kullanıyorum. Ardından oluşturduğum generic tip e , generic olarak Artist tip ini vererek yeni bir tip oluşturuyorum. Gelin adım adım nasıl çalıştığını anlatalım.
Daha önceden ile tip objesi içerisindeki key leri elde edebildiğimizi öğrenmiştik.[ P in keyof T]
nin karşılığı aşağıdaki gibidir.