முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 5 · பாடம் 1 இன் 2பாடத்திட்டத்தில் 9/14~15 min
தொகுதி பாடங்கள் (1/2)

வகை காவலர்கள்

டைப் ஸ்கிரிப்டில் உள்ள மிக முக்கியமான கருத்துக்களில் வகை குறுக்குதல் ஒன்றாகும். இருப்பினும், பெரும்பாலும், சிக்கலான தனிப்பயன் பொருள்களுக்கு typeof அல்லது instanceof போன்ற நிலையான வகை காவலர்கள் போதுமானதாக இல்லை. இங்குதான் தனிப்பயன் வகை காவலர்கள் வருகிறார்கள்.

நிலையான வகை காவலர்கள்

நிலையான ஜாவாஸ்கிரிப்ட் ஆபரேட்டர்களைப் பயன்படுத்தி டைப்ஸ்கிரிப்ட் வகைகளை எவ்வாறு சுருக்குகிறது என்பதை சுருக்கமாகக் கூறுவதன் மூலம் தொடங்குவோம்:

TS
function processInput(val: string | number) {
  if (typeof val === 'string') {
    // Here 'val' is of type string
    console.log(val.toUpperCase());
  } else {
    // Here 'val' is of type number
    console.log(val.toFixed(2));
  }
}

தனிப்பயன் வகை காவலர்கள் (is ஆபரேட்டர்)

தனிப்பயன் வகை காவலரை வரையறுக்க, நிலையான பூலியன் திரும்பும் வகைக்கு பதிலாக parameterName is Type வடிவத்தில் வகை முன்னறிவிப்பை வழங்கும் செயல்பாட்டை நாங்கள் உருவாக்குகிறோம்.

செயல்பாடு ஒரு பூலியனை (true அல்லது false) வழங்க வேண்டும். அது true என வழங்கினால், அனுப்பப்பட்ட அளவுரு குறிப்பிட்ட வகையைச் சேர்ந்தது என்பதை TypeScript அறியும்.

TS
interface Cat {
  name: string;
  meow(): void;
}

interface Dog {
  name: string;
  bark(): void;
}

// This is a custom type guard
function isCat(animal: Cat | Dog): animal is Cat {
  return (animal as Cat).meow !== undefined;
}

function makeNoise(pet: Cat | Dog) {
  if (isCat(pet)) {
    // Here TypeScript knows 'pet' is a Cat
    pet.meow();
  } else {
    // Here TypeScript knows 'pet' is a Dog
    pet.bark();
  }
}

பாதுகாப்பு மற்றும் வார்ப்பு (as vs வகை காவலர்கள்)

வகை வார்ப்பு (எ.கா., val as Cat) எந்த உண்மையான இயக்க நேர சரிபார்ப்பும் இல்லாமல் டெவலப்பரை நம்பும்படி கம்பைலரை கட்டாயப்படுத்துகிறது. இயக்க நேர பொருள் எதிர்பார்ப்புகளை பூர்த்தி செய்யவில்லை என்றால், குறியீடு அமைதியாக தோல்வியடையும் அல்லது விதிவிலக்குகளை வீசும்.

தனிப்பயன் வகை காவலர்கள், மறுபுறம், ஒரு வலுவான மற்றும் ஆற்றல்மிக்க இயக்க நேரச் சரிபார்ப்பைச் செய்து, உண்மையான மாறி வகையின் டைப்ஸ்கிரிப்ட் கம்பைலருக்குப் பாதுகாப்பாகவும் துல்லியமாகவும் தெரிவிக்கின்றனர்:

TS
function processInput(input: unknown) {
  // unsafe casting: could crash if input does not have the split method
  // const str = input as string;
  // console.log(str.split(' '));

  // safe guard
  if (isString(input)) {
    console.log(input.split(' ')); // 100% Safe!
  }
}

நீங்களே முயற்சி செய்து பாருங்கள்

பயிற்சி 1: சரம் வகை காவலர்

உடற்பயிற்சி#ts.m5.l1.e1
முயற்சிகள்: 0ஏற்றுகிறது…

அறியப்படாத மதிப்பு சரமா என்பதை சரிபார்க்க தனிப்பயன் வகை காவலராக செயல்படும் isString என்ற எளிய செயல்பாட்டை உருவாக்கவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

செயல்பாட்டின் திரும்பும் வகை val is string ஆக இருக்க வேண்டும், மேலும் அது 'string' க்கு சமமாக உள்ளதா என்பதைச் சரிபார்க்க typeof ஐப் பயன்படுத்த வேண்டும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

பயிற்சி 2: பிரீமியம் பயனர் வகை காவலர்

உடற்பயிற்சி#ts.m5.l1.e2
முயற்சிகள்: 0ஏற்றுகிறது…

பயனர் மற்றும் பிரீமியம் பயனர் வகைகளைக் கொண்டு, ஒரு வகை பாதுகாப்பு செயல்பாட்டை எழுதுங்கள் isPremiumUser(பயனர்: பயனர்): பயனர் என்பது பிரீமியம் பயனர் என்பது பயனருக்கு 'பிரீமியம்' பங்கு உள்ளதா என்பதைச் சரிபார்க்கும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

கையொப்பத்தை செயல்பாடு isPremiumUser (பயனர்: பயனர்) என வரையறுக்கவும்: பயனர் PremiumUser மற்றும் user.role ஐ 'பிரீமியம்' உடன் ஒப்பிடவும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

பயிற்சி 3: தனிப்பயன் பிழை பொருள் சரிபார்ப்பு

உடற்பயிற்சி#ts.m5.l1.e3
முயற்சிகள்: 0ஏற்றுகிறது…

isCustomError (பிழை: தெரியவில்லை) செயல்படுத்தவும்: err என்பது CustomError செயல்பாடு ஆகும், இது தெரியாத மதிப்பு 'குறியீடு' விசையைக் கொண்ட பூஜ்யமற்ற CustomError பொருளாக உள்ளதா என்பதைச் சரிபார்க்கிறது.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

பிழை வகை 'பொருள்' மற்றும் பூஜ்யமாக இல்லை என்பதை முதலில் சரிபார்க்கவும், பின்னர் 'குறியீடு' சொத்தை சரிபார்க்க 'in' ஆபரேட்டரைப் பயன்படுத்தவும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

பயிற்சி 4: நிர்வாக வகை காவலர்

உடற்பயிற்சி#ts.m5.l1.e4
முயற்சிகள்: 0ஏற்றுகிறது…

பயனர் (சொத்து பாத்திரத்துடன்: சரம்) மற்றும் நிர்வாகி (பயனரை நீட்டித்தல் மற்றும் சொத்து நிர்வாகி டோக்கன்: சரம்) ஆகிய இரண்டு இடைமுகங்கள் கொடுக்கப்பட்டால், isAdmin என்ற வகை காவலர் செயல்பாட்டை எழுதவும், இது பயனர் வகை பயனரை ஏற்று, ஒரு வகை முன்கணிப்பு பயனர் நிர்வாகி என்பதை வழங்குகிறது. பயனரின் பங்கு 'நிர்வாகத்திற்கு' சமமாக உள்ளதா என்பதை காவலர் சரிபார்க்க வேண்டும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

கையொப்பத்தை செயல்பாடு isAdmin (பயனர்: பயனர்) என வரையறுக்கவும்: பயனர் நிர்வாகி மற்றும் user.role === 'admin' என்பதைச் சரிபார்க்கவும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்