ऐसे पुन: प्रयोग योग्य functions और types लिखें जो हर call पर पूरी type सटीकता बनाए रखें।
इस पाठ को Kodokon में खोलेंआप बिना जाने ही generics का इस्तेमाल करते हैं: string[], Promise<number>... अब अपने ख़ुद के लिखने का समय है। एक generic एक type parameter पेश करता है, एक ऐसा variable जिसे हर उपयोग पर एक ठोस type से बदल दिया जाता है। लक्ष्य: logic एक बार लिखें, type सटीकता का त्याग किए बिना।
function first<T>(items: T[]): T | undefined {
return items[0];
}
const n = first([10, 20, 30]);
const s = first(["a", "b"]);ध्यान दें कि आपने call साइट पर कुछ भी निर्दिष्ट नहीं किया: TypeScript argument से T का अनुमान लगाता है। एक बिना-constraint वाला generic कुछ भी स्वीकार करता है; फिर भी किसी function को अक्सर अपने data के बारे में न्यूनतम गारंटी की ज़रूरत होती है। extends keyword T पर एक न्यूनतम shape लागू करता है।
interface HasId {
id: number;
}
function findById<T extends HasId>(
items: T[],
id: number
): T | undefined {
return items.find((item) => item.id === id);
}Types स्वयं generic हो सकते हैं। यह network code में रोज़मर्रा की बात है: response की संरचना स्थिर होती है, केवल data की सामग्री बदलती है। तब एक ही type आपकी सभी API responses का वर्णन करता है।
interface ApiResponse<T> {
ok: boolean;
data: T;
}
type UserResponse = ApiResponse<{ name: string }>;
const res: UserResponse = {
ok: true,
data: { name: "Ada" },
};