पाठ 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।