Modül dersleri (2/2)
Yardımcı Program Türleri
TypeScript, yaygın tür dönüşümlerini kolaylaştırmak için çeşitli genel yardımcı program türleri sağlar. Bu türler geneldir ve mevcut türlerden bildirimsel olarak yeni türler oluşturmanıza olanak tanır.
En sık kullanılan dört yardımcı program türü şunlardır:
1. Partial<T>
Bir türün tüm özelliklerini T isteğe bağlı yapar. Bu, arayanın yalnızca alanların bir alt kümesini sağlayabileceği güncelleme/yama işlevleri için son derece kullanışlıdır:
interface User {
id: number;
name: string;
email: string;
}
// All properties of User become optional: { id?: number; name?: string; email?: string; }
type UserUpdate = Partial<User>;2. Readonly<T>
Bir türün tüm özelliklerini T salt okunur yapar. Bir özelliği yeniden atamaya yönelik herhangi bir girişim, derleme zamanı derleyici hatasını tetikler:
interface Point {
x: number;
y: number;
}
const p: Readonly<Point> = { x: 10, y: 20 };
// p.x = 5; // Error: cannot assign to 'x' because it is a read-only property3. Pick<T, Keys>
T türünden yalnızca belirli bir anahtar kümesini (bir dize birleşimiyle temsil edilir) seçerek bir tür oluşturur:
interface Article {
id: number;
title: string;
content: string;
views: number;
}
// Selects only 'title' and 'views': { title: string; views: number; }
type ArticlePreview = Pick<Article, 'title' | 'views'>;4. Omit<T, Keys>
T türünden belirli bir anahtar kümesini kaldırarak bir tür oluşturur. Pick'in ikilisidir:
interface Product {
id: number;
name: string;
price: number;
secretVendorCode: string;
}
// Removes 'secretVendorCode': { id: number; name: string; price: number; }
type PublicProduct = Omit<Product, 'secretVendorCode'>;5. Record<Keys, Type>
Özellik anahtarları Keys ve özellik değerleri Type olan bir nesne türü oluşturur. Anahtarları değerlerle eşlemek, sözlükleri veya karma tabloları (anahtar-değer haritaları) temsil etmek için son derece kullanışlıdır:
type Page = 'home' | 'about' | 'contact';
interface PageInfo {
title: string;
}
// Creates a dictionary with keys 'home' | 'about' | 'contact' and values PageInfo
const nav: Record<Page, PageInfo> = {
home: { title: 'Home Page' },
about: { title: 'About Us' },
contact: { title: 'Contact Us' },
};Kendin dene
Alıştırma 1: Kısmi ile Profil Güncellemesi
Orijinal bir profili (Profil) ve Profilin tüm alanlarının isteğe bağlı olduğu bir güncelleme nesnesini (güncellemeler) kabul eden updateProfile işlevini tamamlayın. Orijinal özellikleri güncellemelerle birleştiren yeni bir Profil nesnesi döndürmelidir.
İpucu göster
Updates parametresi için Partial<Profile> yardımcı program türünü ve nesneleri birleştirmek için spread operatörünü kullanın: { ...original, ...updates }.
3 denemeden sonra çözüm mevcut
Alıştırma 2: Omit ile Hassas Alanları Kaldırma
UserAccount türü göz önüne alındığında, hassas parolaHash özelliğini atlayan SafeUser adında bir tür takma adı tanımlayın.
İpucu göster
SafeUser türünü kullanın = Omit<UserAccount, 'passwordHash'>; Belirtilen alanı atlamak için.
3 denemeden sonra çözüm mevcut
Alıştırma 3: Seçim ve Salt Okunur ile Genel Yapılandırma
AppConfig türü göz önüne alındığında, yalnızca Pick kullanılarak seçilen apiEndpoint ve bağlantı noktası özelliklerini içeren salt okunur (Salt okunur) bir sürüm olan PublicConfig adında bir tür takma adı tanımlayın.
İpucu göster
Türü kullanın PublicConfig = Readonly<Pick<AppConfig, 'apiEndpoint' | 'bağlantı noktası'>>;
3 denemeden sonra çözüm mevcut
Alıştırma 4: Kayıtlı ve Salt Okunur Kullanıcı Kaydı
Kimlik: sayı ve ad: dize alanlarına sahip bir Kullanıcı arayüzü verildiğinde, Kullanıcı içindeki tüm alanları salt okunur yapan bir ReadOnlyUser türü oluşturun. Ardından, anahtarın bir dize (örneğin dize kimliği) ve değerin ReadOnlyUser olduğu bir sözlüğü temsil eden bir UserRegistry türü oluşturun.
İpucu göster
ReadOnlyUser'ı tanımlamak için Readonly<User> ve kayıt defteri için Record<string, ReadOnlyUser> kullanın.
3 denemeden sonra çözüm mevcut