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

Source: https://www.geekswithgeeks.com/hi/typescript/ts-generic-classes-constraints

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

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

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

```typescript
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` प्रॉपर्टी हो — "कुछ भी" से संकरा, पर दोबारा-उपयोगी होने लायक पर्याप्त चौड़ा।

```typescript
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`।
