రెండూ డేటా యొక్క ఆకారాన్ని వివరించాయి మరియు తరచుగా ఒకదానికొకటి పరస్పరం లేదా మార్పిడిగా ఉపయోగించబడతాయి, కానీ అవి వేరువేరు సామర్థ్యాలను కలిగి ఉన్నాయి.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
రెండూ డేటా యొక్క ఆకారాన్ని వివరించాయి మరియు తరచుగా ఒకదానికొకటి పరస్పరం లేదా మార్పిడిగా ఉపయోగించబడతాయి, కానీ అవి వేరువేరు సామర్థ్యాలను కలిగి ఉన్నాయి.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
typeinterfacetype ID = string | number; // unions
type Pair = [number, number]; // tuples
type Name = User["name"]; // indexed/mapped/conditional types
type Nullable<T> = T | null; // wrap any type
type అనేది ఏదైనా రకం కోసం ఒక సాధారణ alias — primitives, unions, tuples, mapped types. interface కేవలం object/function ఆకారాలను మాత్రమే వివరిస్తుంది.
interface చేయగలిగిన విషయం type చేయలేని విషయంinterface Box { width: number; }
interface Box { height: number; } // declaration merging — both merge into one
// Box now has width AND height
Interfaces declaration merging ను (బహుళ ప్రకటనలు కలిసిపోతాయి) మరియు సాధారణ విధానం విస్తరించడానికి/వృద్ధి చేయడానికి, మూడవ పక్ష లైబ్రరీ రకాలను పెంచడం ఎక్కువ సమర్థవంతమైన ఆచరణ.
interface Admin extends User { role: string; } // interface
type Admin2 = User & { role: string }; // type uses intersection
సాధారణ సంఘటన: object ఆకారాల కోసం మరియు పబ్లిక్ API ల కోసం interface ను ఉపయోగించండి (మెరుగైన ఎర్రర్ సందేశాలు, విస్తరించదగిన, విలీనం చేయదగిన) మరియు unions, tuples లేదా ఇతర రకం ఆపరేషన్ల అవసరమైనప్పుడు type ను ఉపయోగించండి. స్థిరత్వం కోసం ఒకదానిని డిఫాల్ట్గా ఎంచుకోండి — అনేక టీమ్లు objects కోసం interfaceకు డిఫాల్ట్ చేస్తాయి మరియు దీని అতిరేక శక్తి అవసరమైనప్పుడు మాత్రమే typeకు చేరుకుంటాయి.