पाठ 19 / 26

जेनेरिक इंटरफ़ेस, क्लास और कंस्ट्रेंट्स

जेनेरिक कंटेनर, और T को कुछ प्रॉपर्टीज़ वाले टाइप्स तक सीमित करना।

जेनेरिक इंटरफ़ेस और क्लास

जेनेरिक क्लास या इंटरफ़ेस, एक ही परिभाषा को कई पेलोड टाइप्स के लिए दोबारा उपयोग करता है — Box<string> और Box<number> एक ही आकार साझा करते हैं।

interface Box<T> {
  value: T;
}

class Container<T> {
  constructor(public value: T) {}
  get(): T {
    return this.value;
  }
}

const c = new Container<number>(42);

extends से सीमित करना

T extends { length: number }, T को उन टाइप्स तक सीमित करता है जिनमें कम से कम length प्रॉपर्टी हो — "कुछ भी" से संकरा, पर दोबारा-उपयोगी होने लायक पर्याप्त चौड़ा।

function logLength<T extends { length: number }>(item: T): void {
  console.log(item.length);
}

logLength("hello");     // OK, strings have length
logLength([1, 2, 3]);   // OK, arrays have length
logLength(42);
// Error: Argument of type 'number' is not assignable to parameter of type '{ length: number }'.

जेनेरिक्स को सार्थक नाम दें

एक जेनेरिक के लिए T ठीक है। कई होने पर, T, U, V की जगह पठनीय नाम पसंद करें — TKey, TValue