మాడ్యూల్ పాఠాలు (2/2)
యుటిలిటీ రకాలు
టైప్స్క్రిప్ట్ సాధారణ రకం పరివర్తనలను సులభతరం చేయడానికి అనేక గ్లోబల్ యుటిలిటీ రకాలను అందిస్తుంది. ఈ రకాలు సాధారణమైనవి మరియు ఇప్పటికే ఉన్న వాటి నుండి కొత్త రకాలను డిక్లరేటివ్గా రూపొందించడానికి మిమ్మల్ని అనుమతిస్తాయి.
సాధారణంగా ఉపయోగించే నాలుగు యుటిలిటీ రకాలు:
1. Partial<T>
ఒక రకం T ఐచ్ఛికం అన్ని లక్షణాలను చేస్తుంది. కాలర్ ఫీల్డ్ల ఉపసమితిని మాత్రమే సరఫరా చేసే అప్డేట్/ప్యాచ్ ఫంక్షన్లకు ఇది చాలా ఉపయోగకరంగా ఉంటుంది:
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>
ఒక రకమైన అన్ని లక్షణాలను T చదవడానికి మాత్రమే చేస్తుంది. ఆస్తిని తిరిగి కేటాయించే ఏ ప్రయత్నం అయినా కంపైల్-టైమ్ కంపైలర్ లోపాన్ని ప్రేరేపిస్తుంది:
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 రకం నుండి నిర్దిష్ట కీల సెట్ను (స్ట్రింగ్ యూనియన్ ద్వారా సూచించబడుతుంది) మాత్రమే ఎంచుకోవడం ద్వారా రకాన్ని సృష్టిస్తుంది:
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 రకం నుండి నిర్దిష్ట సెట్ కీలను తీసివేయడం ద్వారా రకాన్ని సృష్టిస్తుంది. ఇది Pick యొక్క ద్వంద్వ:
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>
ప్రాపర్టీ కీలు Keys మరియు దీని ఆస్తి విలువలు Type ఉన్న ఆబ్జెక్ట్ రకాన్ని సృష్టిస్తుంది. విలువలకు కీలను మ్యాపింగ్ చేయడానికి, నిఘంటువులు లేదా హాష్ పట్టికలను సూచించడానికి (కీ-విలువ పటాలు) ఇది చాలా ఉపయోగకరంగా ఉంటుంది:
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' },
};మీరే ప్రయత్నించండి
వ్యాయామం 1: పాక్షికంగా ప్రొఫైల్ అప్డేట్
ప్రొఫైల్ యొక్క అన్ని ఫీల్డ్లు ఐచ్ఛికంగా ఉన్న అసలు ప్రొఫైల్ (ప్రొఫైల్) మరియు అప్డేట్ల ఆబ్జెక్ట్ (నవీకరణలు)ని ఆమోదించే updateProfile ఫంక్షన్ను పూర్తి చేయండి. ఇది తప్పనిసరిగా నవీకరణలతో అసలైన లక్షణాలను కలిపి కొత్త ప్రొఫైల్ ఆబ్జెక్ట్ను అందించాలి.
సూచనను చూపించు
అప్డేట్ల పరామితి కోసం పాక్షిక<ప్రొఫైల్> యుటిలిటీ రకాన్ని మరియు ఆబ్జెక్ట్లను విలీనం చేయడానికి స్ప్రెడ్ ఆపరేటర్ని ఉపయోగించండి: { ...ఒరిజినల్, ...అప్డేట్లు }.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం 2: సెన్సిటివ్ ఫీల్డ్లను మినహాయించడంతో తొలగించడం
UserAccount రకాన్ని బట్టి, సెన్సిటివ్ పాస్వర్డ్హాష్ ప్రాపర్టీని వదిలివేసే SafeUser అనే రకం అలియాస్ని నిర్వచించండి.
సూచనను చూపించు
రకాన్ని ఉపయోగించండి SafeUser = విస్మరించండి<UserAccount, 'passwordHash'>; పేర్కొన్న ఫీల్డ్ను వదిలివేయడానికి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం 3: పిక్ మరియు రీడ్ మాత్రమేతో పబ్లిక్ కాన్ఫిగర్
AppConfig రకాన్ని బట్టి, PublicConfig అనే టైప్ అలియాస్ని నిర్వచించండి, అది పిక్ని ఉపయోగించి ఎంచుకున్న apiEndpoint మరియు పోర్ట్ ప్రాపర్టీలను మాత్రమే కలిగి ఉన్న రీడ్-ఓన్లీ (చదవడానికి మాత్రమే) వెర్షన్.
సూచనను చూపించు
రకాన్ని ఉపయోగించండి PublicConfig = చదవడానికి మాత్రమే<Pick<AppConfig, 'apiEndpoint' | 'పోర్ట్'>>;
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం 4: రికార్డ్ మరియు చదవడానికి మాత్రమే యూజర్ రిజిస్ట్రీ
ఫీల్డ్ల id: నంబర్ మరియు పేరు: స్ట్రింగ్తో వినియోగదారు ఇంటర్ఫేస్ అందించబడితే, వినియోగదారులోని అన్ని ఫీల్డ్లను చదవడానికి మాత్రమే చేసే రీడ్ఓన్లీయూజర్ రకాన్ని సృష్టించండి. ఆపై, కీ స్ట్రింగ్ (ఉదా., స్ట్రింగ్ ఐడి) మరియు విలువ ReadOnlyUser అయిన డిక్షనరీని సూచించే రకం UserRegistryని సృష్టించండి.
సూచనను చూపించు
ReadOnlyUserని నిర్వచించడానికి Readonly<User>ని ఉపయోగించండి మరియు రిజిస్ట్రీ కోసం<string, ReadOnlyUser>ని రికార్డ్ చేయండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది