# यूटिलिटी टाइप्स एक नज़र में — टाइपस्क्रिप्ट

Source: https://www.geekswithgeeks.com/hi/typescript/ts-utility-types

> मौजूदा टाइप को बदलने वाले बिल्ट-इन हेल्पर: Partial, Pick, Omit, Record, Readonly।

## Partial और Pick

`Partial<T>` हर प्रॉपर्टी को वैकल्पिक बनाता है (अपडेट पेलोड के लिए बढ़िया)। `Pick<T, K>` केवल सूचीबद्ध कीज़ रखता है।

```typescript
interface User {
  id: number;
  name: string;
  email: string;
}

type UserUpdate = Partial<User>;         // all fields optional
type UserPreview = Pick<User, "id" | "name">; // { id; name }
```

## Omit और Record

`Omit<T, K>` सूचीबद्ध कीज़ को छोड़कर बाक़ी सब रखता है। `Record<K, V>` एक ऑब्जेक्ट टाइप बनाता है जो `K` की हर की को `V` टाइप से मैप करता है।

```typescript
type UserNoEmail = Omit<User, "email">;   // { id; name }
type Roles = "admin" | "editor" | "viewer";
type Permissions = Record<Roles, boolean>;
// { admin: boolean; editor: boolean; viewer: boolean }
```

## Readonly<T>

`Readonly<T>`, हर प्रॉपर्टी को `readonly` बना देता है, मूल टाइप को छुए बिना उसे फ़्रीज़ कर देता है।

```typescript
type FrozenUser = Readonly<User>;
const u: FrozenUser = { id: 1, name: "Ada", email: "a@x.com" };
u.name = "Bo";
// Error: Cannot assign to 'name' because it is a read-only property.
```

## इन्हें मिलाएँ

यूटिलिटी टाइप्स नेस्ट होते हैं: `Readonly<Partial<Pick<User, "name" | "email">>>`, बिना नया इंटरफ़ेस बनाए ठीक वही आकार बनाता है जो चाहिए।
