Kodokon kodokon.com

type बनाम interface: extends और intersection

अपने object types को मॉडल और compose करने के लिए सही construct चुनें, बिना code दोहराए।

8 मिनट · 3 प्रश्न

इस पाठ को Kodokon में खोलें

आप पहले से ही object types घोषित करना जानते हैं। किसी project पर असली सवाल है type और interface के बीच चुनाव करना, और फिर मौजूदा types को compose करना बिना code दोहराए। सबसे आम परिदृश्य से शुरू करते हैं: ऐसी entities को मॉडल करना जो एक जैसी दिखती हैं।

TYPESCRIPT
interface User {
  id: number;
  name: string;
}

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

const admin: Admin = {
  id: 1,
  name: "Ada",
  permissions: ["users:write"],
};
extends के साथ एक interface को बढ़ाना

extends एक स्पष्ट संबंध बनाता है: एक Admin वह User है जिसके पास अतिरिक्त शक्तियाँ हैं। एक type alias के साथ, आपको वही परिणाम intersection operator & के ज़रिए मिलता है, जो कई shapes को एक में मिला देता है। यह cross-cutting concerns के लिए एकदम सही उपकरण है, जैसे कि आपकी सभी entities पर मौजूद timestamps।

TYPESCRIPT
type Timestamps = {
  createdAt: Date;
  updatedAt: Date;
};

type Product = {
  id: number;
  label: string;
};

type StoredProduct = Product & Timestamps;
& intersection के साथ types को compose करना

तो आपको कौन-सा चुनना चाहिए? दो अंतर वाकई मायने रखते हैं। पहला, केवल type ही 'active' | 'archived' जैसे union को नाम दे सकता है। दूसरा, एक ही नाम साझा करने वाली दो interface घोषणाएँ अपने-आप merge हो जाती हैं: किसी library के types को augment करने के लिए सुविधाजनक, पर जब यह गलती से हो तो ख़तरनाक।

TYPESCRIPT
type Status = "active" | "archived";

interface Config {
  locale: string;
}

interface Config {
  debug: boolean;
}

const config: Config = { locale: "fr", debug: true };
Unions केवल type के लिए होते हैं, interface घोषणाएँ merge होती हैं

ज्ञान जांच

सुनिश्चित करें कि आपको इस पाठ के मुख्य बिंदु याद हैं।

  1. आपको 'draft' | 'published' type को नाम देना है। कौन-सा construct आवश्यक है?
    • interface
    • type
    • दोनों काम करते हैं
    • enum
  2. एक ही scope में दो interface Config { ... } घोषणाएँ साथ-साथ मौजूद हैं। क्या होता है?
    • तुरंत एक compile error
    • दूसरी पहली को overwrite कर देती है
    • वे एक ही interface में merge हो जाती हैं
    • पहली को प्राथमिकता मिलती है
  3. कौन-सा operator दो object type aliases को एक ही type में मिला देता है जिसमें दोनों की properties आवश्यक होती हैं?
    • |
    • &
    • extends