ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 2 · 2లో పాఠం 2కోర్సులో 4/14~15 min
మాడ్యూల్ పాఠాలు (2/2)

యూనియన్లు మరియు సంకుచితం

వాస్తవ ప్రపంచంలో, వేరియబుల్స్ మరియు API ప్రతిస్పందనలు ఎల్లప్పుడూ ఒకే స్థిర రకాన్ని కలిగి ఉండవు. టైప్‌స్క్రిప్ట్ వేరియబిలిటీని నిర్వహించడానికి యూనియన్ రకాలను మరియు రన్‌టైమ్‌లో సురక్షితంగా ఆపరేట్ చేయడానికి టైప్ నారోయింగ్ని అందిస్తుంది.


యూనియన్ రకాలు

యూనియన్ రకం వివిధ రకాల విలువలను అంగీకరించడానికి వేరియబుల్‌ను అనుమతిస్తుంది. ఇది నిలువు పట్టీ (|) చిహ్నాన్ని ఉపయోగించి వ్యక్తీకరించబడింది:

TS
let result: number | string;
result = 42; // Valid
result = 'Error 404'; // Valid

అయితే, యూనియన్ రకంతో పని చేస్తున్నప్పుడు, మేము ఒక రకానికి మాత్రమే చెందిన పద్ధతులను నేరుగా కాల్ చేయలేము (ఉదాహరణకు, వేరియబుల్ కూడా number అయితే మేము .toUpperCase()కి కాల్ చేయలేము). మేము మొదట రకాన్ని "ఇరుకైన" చేయాలి.


టైప్ నారోయింగ్

టైప్ నారోయింగ్ అనేది టైప్‌స్క్రిప్ట్ అనేది రన్‌టైమ్‌లో వేరియబుల్ కోసం మరింత నిర్దిష్ట రకాన్ని తగ్గించడానికి నియంత్రణ ప్రవాహ నిర్మాణాలను (if లేదా switch వంటివి) విశ్లేషించే ప్రక్రియ.

సంకుచితం చేయడానికి అనేక మార్గాలు ఉన్నాయి:

1. typeof ఆపరేటర్

ఆదిమ రకాలను వేరు చేయడానికి అనువైనది:

TS
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 ఆపరేటర్

వస్తువుపై నిర్దిష్ట ఆస్తి ఉందో లేదో తనిఖీ చేయడానికి ఉపయోగించబడుతుంది:

TS
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
  }
}

వివక్షకు గురైన యూనియన్లు

వివక్షకు గురైన యూనియన్‌లు నమూనా అనేది ఒక ప్రత్యేక అక్షర విలువ (వివక్షత అని పిలుస్తారు)తో ఉమ్మడి ఆస్తిని పంచుకునే వస్తువులను సృష్టించడం. టైప్‌స్క్రిప్ట్ ఈ వివక్షతను గుర్తిస్తుంది మరియు షరతులతో కూడిన బ్లాక్‌లలో రకాన్ని స్వయంచాలకంగా తగ్గిస్తుంది.

TS
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: యూనియన్ రకాలు

వ్యాయామం#ts.m2.l2.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

id అనే వేరియబుల్‌ని డిక్లేర్ చేయండి అది ఒక సంఖ్య లేదా స్ట్రింగ్ కావచ్చు. దీన్ని ముందుగా 101 నంబర్‌తో ప్రారంభించండి, ఆపై స్ట్రింగ్ విలువ 'USER-101'ని కేటాయించండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

ఉపయోగించండి | లెట్ వేరియబుల్ డిక్లరేషన్‌లో నంబర్ మరియు స్ట్రింగ్‌ను చేరడానికి ఆపరేటర్.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం 2: ప్రాథమిక రకం సంకుచితం

వ్యాయామం#ts.m2.l2.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

టైప్ స్ట్రింగ్ లేదా నంబర్ యొక్క పారామీటర్ ఇన్‌పుట్‌ను ఆమోదించే ఫార్మాట్‌ఇన్‌పుట్ అనే ఫంక్షన్‌ను సృష్టించండి. ఇన్‌పుట్ స్ట్రింగ్ అయితే, రిటర్న్ ఇన్‌పుట్ పెద్ద అక్షరానికి మార్చబడుతుంది. ఇది సంఖ్య అయితే, ఇన్‌పుట్‌ని 2తో గుణించండి. రకాలను స్పష్టంగా పేర్కొనండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

ప్రవర్తనను బ్రాంచ్ చేయడానికి if బ్లాక్ లోపల టైప్ ఆఫ్ ఇన్‌పుట్ === 'స్ట్రింగ్' ఉపయోగించండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం 3: 'ఇన్'తో సంకుచితం

వ్యాయామం#ts.m2.l2.e3
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

కార్ (మెథడ్ డ్రైవ్‌తో) మరియు బోట్ (మెథడ్ సెయిల్‌తో) అనే రెండు ఇంటర్‌ఫేస్‌లను బట్టి, కార్ లేదా బోట్ రకం పారామీటర్ వెహికల్‌ని ఆమోదించే మూవ్‌వెహికల్ అనే ఫంక్షన్‌ను వ్రాయండి. వాహనం డ్రైవ్ ప్రాపర్టీని కలిగి ఉంటే, డ్రైవ్() పద్ధతిని అమలు చేయండి. లేకపోతే, తెరచాప() పద్ధతిని అమలు చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

ఇంటర్‌ఫేస్‌ను తగ్గించడానికి వాహనంలో 'డ్రైవ్' రూపంలో ఇన్ ఆపరేటర్‌ని ఉపయోగించండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం 4: వివక్షత యూనియన్ ఆకారం

వ్యాయామం#ts.m2.l2.e4
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

సర్కిల్ మరియు స్క్వేర్ అనే రెండు రకాల కలయికతో కూడిన ఆకారాన్ని నిర్వచించండి. సర్కిల్‌కు 'వృత్తం' (అక్షర విలువ) మరియు వ్యాసార్థం (సంఖ్య)కు సెట్ చేయబడిన రకమైన ఆస్తి ఉంటుంది. చతురస్రం ఒక రకమైన ఆస్తిని 'స్క్వేర్' (అక్షర విలువ) మరియు ఒక వైపు (సంఖ్య)గా సెట్ చేస్తుంది. ఆపై రకం ఆకారం యొక్క ఆకారాన్ని అంగీకరించి, ప్రాంతాన్ని సంఖ్యగా అందించే getArea ఫంక్షన్‌ను వ్రాయండి (వృత్తం Math.PI * వ్యాసార్థం * వ్యాసార్థం, చదరపు వైపు * వైపు కోసం).

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

రకాన్ని వివరించడానికి మరియు సరైన ప్రాంతాన్ని లెక్కించడానికి getArea లోపల shape.kind === 'వృత్తం' ఉపయోగించండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది