தொகுதி பாடங்கள் (2/2)
தொழிற்சங்கங்கள் மற்றும் குறுகுதல்
நிஜ உலகில், மாறிகள் மற்றும் API பதில்கள் எப்போதும் ஒரு நிலையான வகையைக் கொண்டிருக்காது. டைப்ஸ்கிரிப்ட் மாறுபாட்டைக் கையாள யூனியன் வகைகளை வழங்குகிறது, மேலும் இயக்க நேரத்தில் அவற்றைப் பாதுகாப்பாகச் செயல்பட டைப் நெரோவிங்.
யூனியன் வகைகள்
ஒரு யூனியன் வகையானது, பல்வேறு வகைகளின் மதிப்புகளை ஏற்க மாறியை அனுமதிக்கிறது. இது செங்குத்து பட்டை (|) குறியீட்டைப் பயன்படுத்தி வெளிப்படுத்தப்படுகிறது:
let result: number | string;
result = 42; // Valid
result = 'Error 404'; // Validஇருப்பினும், தொழிற்சங்க வகையுடன் பணிபுரியும் போது, ஒரே ஒரு வகையைச் சேர்ந்த முறைகளை நேரடியாக அழைக்க முடியாது (உதாரணமாக, மாறி number ஆக இருந்தால் .toUpperCase() ஐ அழைக்க முடியாது). நாம் முதலில் வகை "குறுகிய" வேண்டும்.
வகை குறுகுதல்
Type Narrowing என்பது இயக்க நேரத்தில் ஒரு மாறிக்கான மிகவும் குறிப்பிட்ட வகையைக் கண்டறிய, கட்டுப்பாட்டு ஓட்ட அமைப்புகளை (if அல்லது switch போன்றவை) டைப்ஸ்கிரிப்ட் பகுப்பாய்வு செய்யும் செயல்முறையாகும்.
குறுகலைச் செய்ய பல வழிகள் உள்ளன:
1. typeof ஆபரேட்டர்
பழமையான வகைகளை வேறுபடுத்துவதற்கு ஏற்றது:
function printLength(value: string | number) {
if (typeof value === 'string') {
// TypeScript knows 'value' is a string here
console.log(value.length);
} else {
// TypeScript knows 'value' is a number here
console.log(value.toFixed(2));
}
}2. in ஆபரேட்டர்
ஒரு பொருளில் ஒரு குறிப்பிட்ட சொத்து உள்ளதா என்பதைச் சரிபார்க்கப் பயன்படுகிறது:
interface Fish {
swim: () => void;
}
interface Bird {
fly: () => void;
}
function move(animal: Fish | Bird) {
if ('swim' in animal) {
animal.swim(); // Narrowing to Fish
} else {
animal.fly(); // Narrowing to Bird
}
}பாரபட்சமான தொழிற்சங்கங்கள்
பாகுபாடு யூனியன்கள் மாதிரியானது, ஒரு பொதுவான சொத்தைப் பகிரும் பொருட்களை உருவாக்குவதைக் கொண்டுள்ளது, இது ஒரு தனித்துவமான சொற் மதிப்பு (பாகுபாடு என்று அழைக்கப்படுகிறது). டைப்ஸ்கிரிப்ட் இந்த பாகுபாட்டை அங்கீகரிக்கிறது மற்றும் நிபந்தனைக்குட்பட்ட தொகுதிகளுக்குள் தானாகவே வகையைச் சுருக்குகிறது.
interface SuccessResponse {
status: 'success'; // Literal discriminator
data: string;
}
interface ErrorResponse {
status: 'error'; // Literal discriminator
errorMessage: string;
}
type ApiResponse = SuccessResponse | ErrorResponse;
function handleResponse(response: ApiResponse) {
if (response.status === 'success') {
console.log('Data received:', response.data);
} else {
console.error('An error occurred:', response.errorMessage);
}
}நீங்களே முயற்சி செய்து பாருங்கள்
பயிற்சி 1: யூனியன் வகைகள்
எண் அல்லது சரமாக இருக்கக்கூடிய ஐடி என்ற மாறியை அறிவிக்கவும். முதலில் 101 என்ற எண்ணைக் கொண்டு அதைத் துவக்கவும், பின்னர் 'USER-101' என்ற சர மதிப்பை ஒதுக்கவும்.
குறிப்பைக் காட்டு
பயன்படுத்தவும் | லெட் மாறி அறிவிப்பில் எண் மற்றும் சரத்தை இணைக்க ஆபரேட்டர்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
பயிற்சி 2: அடிப்படை வகை குறுக்குதல்
வகை சரம் அல்லது எண்ணின் அளவுரு உள்ளீட்டை ஏற்கும் formatInput என்ற செயல்பாட்டை உருவாக்கவும். உள்ளீடு ஒரு சரமாக இருந்தால், உள்ளீடு பெரிய எழுத்தாக மாற்றப்படும். இது ஒரு எண்ணாக இருந்தால், உள்ளீட்டை 2 ஆல் பெருக்க வேண்டும். வகைகளை வெளிப்படையாகக் குறிப்பிடவும்.
குறிப்பைக் காட்டு
நடத்தையை கிளைக்க, if block-க்குள் உள்ளீடு வகை === 'ஸ்ட்ரிங்' பயன்படுத்தவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
பயிற்சி 3: 'இன்' உடன் சுருக்குதல்
கார் (முறை இயக்கத்துடன்) மற்றும் படகு (செய்ல் முறையுடன்) ஆகிய இரண்டு இடைமுகங்களைக் கொண்டு, கார் அல்லது படகு வகையின் அளவுரு வாகனத்தை ஏற்கும் மூவ் வெஹிக்கிள் என்ற செயல்பாட்டை எழுதவும். வாகனம் ஓட்டும் பண்பு இருந்தால், டிரைவ்() முறையை இயக்கவும். இல்லையெனில், sail() முறையை இயக்கவும்.
குறிப்பைக் காட்டு
இடைமுகத்தை சுருக்க வாகனத்தில் 'டிரைவ்' வடிவத்தில் உள்ள ஆபரேட்டரைப் பயன்படுத்தவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
பயிற்சி 4: பாரபட்சமான யூனியன் வடிவம்
ஒரு வகை வடிவத்தை வரையறுக்கவும், இது இரண்டு வகைகளின் ஒன்றியம்: வட்டம் மற்றும் சதுரம். வட்டமானது 'வட்டம்' (எழுத்து மதிப்பு) மற்றும் ஆரம் (எண்) என அமைக்கப்பட்ட ஒரு வகையான பண்புகளைக் கொண்டுள்ளது. சதுரமானது 'சதுரம்' (எழுத்து மதிப்பு) மற்றும் ஒரு பக்க (எண்) என அமைக்கப்பட்ட ஒரு வகையான சொத்து உள்ளது. பின்னர் வகை வடிவ வடிவத்தை ஏற்று, பகுதியை எண்ணாக வழங்கும் getArea செயல்பாட்டை எழுதவும் (வட்டத்திற்கு Math.PI * ஆரம் * ஆரம், சதுர பக்கம் * பக்கத்திற்கு).
குறிப்பைக் காட்டு
வகையை வேறுபடுத்தி சரியான பகுதியைக் கணக்கிட getArea உள்ளே shape.kind === 'வட்டம்' பயன்படுத்தவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்