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

అలియాస్ vs ఇంటర్‌ఫేస్‌లను టైప్ చేయండి

టైప్‌స్క్రిప్ట్‌లో, సంక్లిష్ట వస్తువుల నిర్మాణాన్ని మనం రెండు ప్రాథమిక మార్గాల్లో నిర్వచించవచ్చు: ఇంటర్‌ఫేస్‌లు (interface) లేదా టైప్ మారుపేర్లు (type). రెండూ ఒక వస్తువు లేదా డేటా నిర్మాణం యొక్క "ఆకారాన్ని" వివరించడానికి ఉపయోగపడతాయి, కానీ వాటికి కొన్ని ప్రాథమిక తేడాలు ఉన్నాయి.


ఇంటర్‌ఫేస్‌లు (interface)

ఇంటర్‌ఫేస్ ఒక వస్తువు యొక్క నిర్మాణం కోసం ఒక ఒప్పందాన్ని నిర్వచిస్తుంది. ఆబ్జెక్ట్ ఆకృతులను మరియు పబ్లిక్ APIలను విస్తరించదగిన విధంగా వివరించడానికి ఇది ప్రామాణిక సాధనం.

TS
interface Book {
  title: string;
  pages: number;
  author?: string; // Optional property (can be omitted)
}

const myBook: Book = {
  title: 'The Lord of the Rings',
  pages: 1200,
};

ప్రశ్న గుర్తు (?) ఒక ఆస్తిని ఐచ్ఛికంగా సూచిస్తుంది. myBook ఆబ్జెక్ట్ author ఆస్తిని వదిలివేసినప్పటికీ చెల్లుబాటు అవుతుంది.


మారుపేర్లను టైప్ చేయండి (type)

ఒక రకం అలియాస్ మిమ్మల్ని ఆదిమ రకాలు, యూనియన్‌లు, టుపుల్స్ లేదా మొత్తం ఆబ్జెక్ట్ స్ట్రక్చర్‌లతో సహా ఇప్పటికే ఉన్న ఏదైనా రకంతో కొత్త పేరుని అనుబంధించడానికి అనుమతిస్తుంది.

TS
type Point = {
  x: number;
  y: number;
};

const coordinates: Point = { x: 10, y: 20 };

ముఖ్య తేడాలు: పొడిగింపు మరియు ప్రకటన విలీనం

interface మరియు type చాలా సాధారణ వినియోగ సందర్భాలలో పరస్పరం మార్చుకోగలిగినప్పటికీ, అవి రెండు క్లిష్టమైన వ్యత్యాసాలను ప్రదర్శిస్తాయి:

1. విస్తరణ (వారసత్వం)

extends కీవర్డ్ ఉపయోగించి ఇంటర్‌ఫేస్‌లు విస్తరించబడ్డాయి:

TS
interface User {
  username: string;
}

interface Admin extends User {
  privileges: string[];
}

టైప్ మారుపేర్లను extends ఉపయోగించి పొడిగించడం సాధ్యం కాదు, కానీ వాటిని ఖండన ఆపరేటర్ (&) ఉపయోగించి కలపవచ్చు:

TS
type User = {
  username: string;
};

type Admin = User & {
  privileges: string[];
};

2. డిక్లరేషన్ విలీనం

ఒకే స్కోప్‌లో ఒకే పేరుతో ఉన్న బహుళ ఇంటర్‌ఫేస్‌లు కంపైలర్ ద్వారా స్వయంచాలకంగా విలీనం చేయబడతాయి:

TS
interface User {
  name: string;
}
interface User {
  email: string;
}
// Now User has both 'name' and 'email'!

ఈ ప్రవర్తనకు మద్దతు లేదు రకం మారుపేర్లు: ఒకే typeని రెండుసార్లు ప్రకటించడం కంపైల్-సమయ లోపాన్ని ప్రేరేపిస్తుంది.


మీరే ప్రయత్నించండి

వ్యాయామం 1: వినియోగదారు ఇంటర్‌ఫేస్

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

వినియోగదారు ఆబ్జెక్ట్‌ను వివరించే వినియోగదారు అనే ఇంటర్‌ఫేస్‌ను నిర్వచించండి. ఇంటర్‌ఫేస్ తప్పనిసరిగా కలిగి ఉండాలి: id ఒక సంఖ్యగా, వినియోగదారు పేరు స్ట్రింగ్‌గా మరియు ఇమెయిల్ ఐచ్ఛిక స్ట్రింగ్‌గా ఉండాలి.

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

సింటాక్స్ ఇమెయిల్‌ని ఉపయోగించాలా?: స్ట్రింగ్‌ని ఐచ్ఛికంగా గుర్తించడానికి.

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

వ్యాయామం 2: Point2D రకం అలియాస్

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

x మరియు y కోఆర్డినేట్‌లతో (రెండూ సంఖ్యలు) ద్విమితీయ బిందువును సూచించే Point2D అనే రకం మారుపేరును సృష్టించండి.

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

సింటాక్స్ రకాన్ని ఉపయోగించండి Point2D = { x: number; y: సంఖ్య; };

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

వ్యాయామం 3: ఇంటర్‌ఫేస్‌లను విస్తరించడం

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

ఐడి (సంఖ్య) మరియు ధర (సంఖ్య)తో ఉత్పత్తి అనే ఇంటర్‌ఫేస్‌ను నిర్వచించండి. తర్వాత, డిస్కౌంట్‌కోడ్ (స్ట్రింగ్) పేరుతో ఉత్పత్తిని విస్తరించి, ఐచ్ఛిక ప్రాపర్టీని జోడించే డిస్‌కౌంటెడ్‌ప్రొడక్ట్ అనే ఇంటర్‌ఫేస్‌ను నిర్వచించండి.

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

ఫీల్డ్‌లను వారసత్వంగా పొందడానికి మరియు డిస్కౌంట్‌కోడ్‌ను జోడించడానికి విస్తారిత ఉత్పత్తిని ఉపయోగించండి?: స్ట్రింగ్.

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

వ్యాయామం 4: సర్వర్ కాన్ఫిగరేషన్

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

సర్వర్ కోసం కాన్ఫిగరేషన్ ఆబ్జెక్ట్‌ని సూచించే ServerConfig అనే రకం అలియాస్‌ని నిర్వచించండి. ఇది తప్పనిసరిగా కలిగి ఉండాలి: హోస్ట్ (స్ట్రింగ్), పోర్ట్ (సంఖ్య) మరియు ఐచ్ఛిక బూలియన్ ఫీల్డ్‌గా useHttps.

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

సింటాక్స్ రకాన్ని ఉపయోగించండి ServerConfig = {హోస్ట్: స్ట్రింగ్; పోర్ట్: సంఖ్య; useHttps?: బూలియన్; }.

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