سایت خبرکاو

جستجوگر هوشمند اخبار و مطالب فناوری

نحوه عملکرد TypeScript Generics – با مثال توضیح داده شده است

TypeScript با سیستم تایپ قدرتمند خود، قابلیتی به نام Generics را ارائه می دهد که به توسعه دهندگان امکان می دهد کدهای قابل استفاده مجدد و ایمن را بنویسند. Generics به شما اجازه می دهد تا اجزایی ایجاد کنید که می توانند روی انواع مختلف کار کنند تا تکی. این مقاله به تحلیل Generics TypeScript می پردازد و توضیحات کامل و نمونه های کد را برای نشان دادن استفاده و مزایای آنها ارائه می دهد. می توانید ...

TypeScript با سیستم تایپ قدرتمند خود، قابلیتی به نام Generics را ارائه می دهد که به توسعه دهندگان امکان می دهد کدهای قابل استفاده مجدد و ایمن را بنویسند. Generics به شما اجازه می دهد تا اجزایی ایجاد کنید که می توانند روی انواع مختلف کار کنند تا تکی.

این مقاله به تحلیل Generics TypeScript می پردازد و توضیحات کامل و نمونه های کد را برای نشان دادن استفاده و مزایای آنها ارائه می دهد.

می توانید تمام کد منبع را از اینجا دریافت کنید.

فهرست مطالب

ژنریک چیست؟

موارد استفاده از Generics TypeScript

نتیجه

ژنریک چیست؟

Generics در TypeScript نوشتن کد را فعال می کند که می تواند با انواع داده ها کار کند و در عین حال ایمنی نوع را حفظ کند. آنها امکان ایجاد اجزاء، توابع و ساختارهای داده قابل استفاده مجدد را بدون به خطر انداختن تحلیل نوع می دهند.

ژنریک ها با پارامترهای نوع نشان داده می شوند که به عنوان مکان نگهدار برای انواع عمل می کنند. این پارامترها در براکت های زاویه ای ( <> ) مشخص می شوند و می توانند در سراسر کد برای تعریف انواع متغیرها، پارامترهای تابع، انواع برگشتی و موارد دیگر استفاده شوند.

موارد استفاده از Generics TypeScript

استفاده اساسی از ژنریک

بیایید با یک مثال ساده از یک تابع عمومی شروع کنیم:

 function identity<T>(arg: T): T { return arg; } let output = identity<string>("hello"); console.log(output); // Output: hello

در این مثال، identity یک تابع عمومی است که یک پارامتر نوع T را می گیرد. پارامتر arg از نوع T است و نوع برگشتی تابع نیز T است. هنگام فراخوانی identity<string>("hello") ، پارامتر نوع T به عنوان string استنباط می شود که ایمنی نوع را تضمین می کند.

نحوه استفاده از کلاس های عمومی

ژنریک ها به توابع محدود نمی شوند - آنها همچنین می توانند با کلاس ها استفاده شوند. مثال زیر از یک کلاس Box عمومی را در نظر بگیرید:

 class Box<T> { private value: T; constructor(value: T) { this.value = value; } getValue(): T { return this.value; } } let box = new Box<number>(42); console.log(box.getValue()); // Output: 42

در اینجا، Box یک کلاس عمومی با پارامتر نوع T است. سازنده مقداری از نوع T می گیرد و متد getValue مقداری از نوع T را برمی گرداند. هنگام ایجاد نمونه ای از Box<number> ، فقط می تواند مقادیر نوع number را ذخیره و برگرداند.

نحوه اعمال محدودیت در Generics

گاهی اوقات، ممکن است بخواهید انواعی را که می توان با ژنریک ها استفاده کرد محدود کنید. TypeScript به شما این امکان را می دهد که با استفاده از کلمه کلیدی extends محدودیت هایی را بر روی پارامترهای نوع مشخص کنید. بیایید یک مثال را ببینیم:

 interface Lengthwise { length: number; } function loggingIdentity<T extends Lengthwise>(arg: T): T { console.log(arg.length); return arg; } let result = loggingIdentity("hello"); console.log(result); // Output: hello

در این مثال، تابع loggingIdentity یک پارامتر نوع T را می گیرد که باید رابط Lengthwise را گسترش دهد، که تضمین می کند arg دارای ویژگی length است. این محدودیت امکان دسترسی به ویژگی length را بدون ایجاد خطای کامپایل فراهم می کند.

نحوه استفاده از Generics با رابط ها

ژنریک ها همچنین می توانند با رابط ها برای ایجاد تعاریف انعطاف پذیر و قابل استفاده مجدد استفاده شوند. به مثال زیر توجه کنید:

 interface Pair<T, U> { first: T; second: U; } let pair: Pair<number, string> = { first: 1, second: "two" }; console.log(pair); // Output: { first: 1, second: "two" }

در اینجا، Pair یک رابط با دو پارامتر نوع T و U است که به ترتیب نشان دهنده انواع ویژگی های first و second است. هنگامی که pair به عنوان Pair<number, string> اعلان می کنیم، الزام می کند که ویژگی first باید یک عدد باشد و خاصیت second باید یک رشته باشد.

نحوه استفاده از توابع عمومی با آرایه

 function reverse<T>(array: T[]): T[] { return array.reverse(); } let numbers: number[] = [1, 2, 3, 4, 5]; let reversedNumbers: number[] = reverse(numbers); console.log(reversedNumbers); // Output: [5, 4, 3, 2, 1]

در این مثال، تابع reverse آرایه ای از نوع T را می گیرد و یک آرایه معکوس از همان نوع را برمی گرداند. با استفاده از ژنریک، این تابع می تواند با آرایه ها از هر نوع کار کند و ایمنی نوع را تضمین کند.

نحوه استفاده از محدودیت های عمومی با keyof

 function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] { return obj[key]; } let person = { name: "John", age: 30, city: "New York" }; let age: number = getProperty(person, "age"); console.log(age); // Output: 30

در اینجا تابع getProperty یک شی از نوع T و یک کلید از نوع K را می گیرد که در آن K کلیدهای T را گسترش می دهد. سپس مقدار خاصیت مربوطه را از شی برمی گرداند. این مثال نحوه استفاده از ژنریک ها با keyof برای اعمال ایمنی نوع هنگام دسترسی به ویژگی های شی را نشان می دهد.

نحوه استفاده از توابع عمومی Utility

 function toArray<T>(value: T): T[] { return [value]; } let numberArray: number[] = toArray(42); console.log(numberArray); // Output: [42] let stringArray: string[] = toArray("hello"); console.log(stringArray); // Output: ["hello"]

تابع toArray یک مقدار واحد از نوع T را به آرایه ای حاوی آن مقدار تبدیل می کند. این تابع ساده نشان می دهد که چگونه می توان از ژنریک برای ایجاد کد قابل استفاده مجدد استفاده کرد که بدون زحمت با انواع داده های مختلف سازگار می شود.

نحوه استفاده از رابط های عمومی با یک تابع

 interface Transformer<T, U> { (input: T): U; } function uppercase(input: string): string { return input.toUpperCase(); } let transform: Transformer<string, string> = uppercase; console.log(transform("hello")); // Output: HELLO

در این مثال، ما یک رابط Transformer با دو پارامتر نوع T و U تعریف می کنیم که به ترتیب نوع ورودی و خروجی را نشان می دهد. سپس یک تابع را uppercase اعلام می کنیم و آن را به یک transform متغیر از نوع Transformer<string, string> نسبت می دهیم. این نشان می دهد که چگونه می توان از ژنریک برای تعریف رابط های انعطاف پذیر برای توابع استفاده کرد.

نتیجه

چه توابع، کلاس ها یا رابط ها، ژنریک ها مکانیزم قوی برای ساخت برنامه های TypeScript مقیاس پذیر و قابل نگهداری ارائه می دهند. درک و تسلط بر اصول عمومی می تواند توانایی شما در نوشتن کد کارآمد و بدون خطا را به میزان قابل توجهی افزایش دهد.

اگر بازخوردی دارید، در توییتر یا لینکدین به من پیام دهید.

خبرکاو