متن خبر

TypeScript را یاد بگیرید – راهنمای جامع برای مبتدیان

TypeScript را یاد بگیرید – راهنمای جامع برای مبتدیان

شناسهٔ خبر: 687167 -




TypeScript به یک استاندارد صنعتی برای ساخت برنامه های کاربردی در مقیاس بزرگ تبدیل شده است و بسیاری از سازمان ها آن را به عنوان زبان اصلی خود برای توسعه برنامه انتخاب می کنند.

این آموزش به عنوان راهنمای مقدماتی شما برای TypeScript خواهد بود. این برنامه برای پاسخگویی به فراگیران در تمام مراحل - از مبتدی تا کاربران پیشرفته طراحی شده است. مفاهیم اساسی و پیشرفته تایپ اسکریپت را آموزش می دهد و آن را به منبعی مفید برای هر کسی که به دنبال کشف تایپ اسکریپت است تبدیل می کند.

هدف این راهنما این نیست که یک منبع جامع باشد، بلکه یک مرجع مختصر و مفید است. این ماهیت TypeScript را به یک قالب قابل هضم تقطیر می کند.

چه یک تازه کار باشید که تازه شروع به کار کرده اید، چه یک یادگیرنده متوسط ​​با هدف تثبیت دانش خود، یا یک کاربر پیشرفته که نیاز به تجدید سریع دارید، این راهنما برای برآورده کردن نیازهای یادگیری TypeScript شما ساخته شده است.

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

فهرست مطالب

پیش نیازها

این راهنما برای چه کسانی است؟

TypeScript در مقابل جاوا اسکریپت

مزایای TypeScript

تولید کد

نصب و راه اندازی

پیکربندی

آشنایی با tsconfig.json

مبانی TypeScript

تایپ اعلان ها و متغیرها در TypeScript

توابع در TypeScript

کلاس ها و اشیا در TypeScript

رابط ها در TypeScript

Enums در TypeScript

ژنریک در TypeScript

پیش نیازها

قبل از شروع مطالعه این راهنما، باید درک اولیه ای از جاوا اسکریپت داشته باشید. آشنایی با مفاهیم برنامه نویسی شی گرا مانند کلاس ها، رابط ها و وراثت نیز توصیه می شود.

اما اگر با این مفاهیم تازه کار هستید، نگران نباشید - در این راهنما آنها را به تفصیل توضیح خواهیم داد.

این راهنما برای چه کسی است؟

این راهنما برای کسانی است که به دنبال یادگیری TypeScript هستند. چه مبتدی، چه یک زبان آموز متوسط ​​یا یک کاربر پیشرفته باشید، این راهنما برای رفع نیازهای یادگیری TypeScript شما طراحی شده است.

همچنین یک مرجع مفید برای هر کسی است که به دنبال تقویت مهارت های TypeScript خود است.

تایپ اسکریپت در مقابل جاوا اسکریپت

TypeScript یک ابر مجموعه جاوا اسکریپت با تایپ ایستا است که برای ارتقای توسعه برنامه های کاربردی در مقیاس بزرگ طراحی شده است.

static typing ، classes و interfaces اختیاری را به JavaScript معرفی می‌کند و با زبان‌هایی مانند C# و Java مشابهت می‌کند. کد TypeScript به جاوا اسکریپت ساده منتقل می شود و از سازگاری در محیط های مختلف جاوا اسکریپت اطمینان حاصل می کند.

در حالی که TypeScript و JavaScript می توانند در یک محیط کار کنند، تفاوت های کلیدی را نشان می دهند. نکته اصلی این است که تایپ اسکریپت به صورت ایستا تایپ می شود و ایمنی نوع را فراهم می کند، در حالی که جاوا اسکریپت به صورت پویا تایپ می شود.

بیایید به برخی از این تفاوت ها بپردازیم:

کد TypeScript در فایل های .ts یا .tsx نوشته می شود، در حالی که کد جاوا اسکریپت در فایل های .js یا .jsx قرار دارد. پسوندهای .tsx و .jsx نشان می‌دهند که فایل ممکن است حاوی دستور JSX باشد، که یک انتخاب محبوب برای توسعه UI در کتابخانه‌هایی مانند React است.

بیایید تفاوت های بین JavaScript و TypeScript را از طریق یک مثال تحلیل کنیم:

 // JavaScript function add(a, b) { return a + b; } // Calling the function add(1, 2); // Returns: 3

در مثال جاوا اسکریپت بالا، تابع add دو پارامتر a و b را می گیرد و مجموع آنها را برمی گرداند. تابع با آرگومان های 1 و 2 فراخوانی می شود و 3 را به دست می دهد. توجه داشته باشید که پارامترهای تابع با انواع حاشیه نویسی نمی شوند، که در جاوا اسکریپت معمول است.

حال، بیایید ببینیم چگونه می توانیم همان تابع را در TypeScript بنویسیم:

 // TypeScript function add(a: number, b: number): number { return a + b; } // Calling the function add(1, 2); // Returns: 3

در نسخه TypeScript، پارامترهای a و b را با نوع number حاشیه نویسی کرده ایم. همچنین مشخص کرده‌ایم که تابع یک number را برمی‌گرداند.

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

این ویژگی به شناسایی خطاها در مراحل اولیه توسعه کمک می کند و TypeScript را به یک انتخاب محبوب برای برنامه های کاربردی در مقیاس بزرگ تبدیل می کند.

TypeScript و JavaScript هر دو زبان های قدرتمندی هستند که در طیف وسیعی از برنامه ها استفاده می شوند. بیایید تفاوت های اصلی آنها را خلاصه کنیم:

ویژگی TypeScript جاوا اسکریپت
سیستم را تایپ کنید تایپ استاتیک (انواع در زمان کامپایل تحلیل می شوند) تایپ پویا (انواع در زمان اجرا تحلیل می شوند)
سوپرست بله، تایپ اسکریپت ابر مجموعه ای از جاوا اسکریپت است N/A
تالیف نیاز به کامپایل (یا ترجمه) در جاوا اسکریپت است نیازی به کامپایل ندارد
ویژگی های OOP شامل ویژگی های پیشرفته OOP مانند رابط ها، ژنریک ها و دکوراتورها است از OOP از طریق نمونه های اولیه پشتیبانی می کند، به طور بومی از رابط ها یا ژنریک ها پشتیبانی نمی کند
ابزار سازی با تکمیل خودکار، تحلیل نوع و پشتیبانی از نقشه منبع، ابزارهای بهتری را ارائه می دهد ابزار اولیه
جامعه و اکوسیستم جامعه و اکوسیستم جدیدتر و کوچکتر جامعه بزرگ و اکوسیستم وسیع کتابخانه ها و چارچوب ها از سال 1995
منحنی یادگیری تندتر به دلیل ویژگی های اضافی به طور کلی برای مبتدیان راحت تر است
موارد استفاده معمولاً در پایگاه‌های کد بزرگ‌تر استفاده می‌شود، جایی که مزایای تحلیل نوع و تکمیل خودکار بیشتر قابل توجه است. مورد استفاده برای توسعه سمت کلاینت و سمت سرور، می تواند به صورت بومی در مرورگر اجرا شود

مزایای TypeScript

TypeScript چندین مزیت نسبت به جاوا اسکریپت دارد:

    ابزار بهبود یافته : تایپ استاتیک TypeScript پشتیبانی بهتر از ابزار را امکان پذیر می کند. ویژگی هایی مانند autocompletion ، inference نوع، و تحلیل نوع، فرآیند توسعه را کارآمدتر و لذت بخش تر می کند.

    مستندسازی بهتر : درک و نگهداری پایگاه‌های کد TypeScript اغلب آسان‌تر است. حاشیه نویسی های نوع به عنوان مستندات ضمنی عمل می کنند و درک نوع مقادیری را که یک تابع انتظار دارد و برمی گرداند آسان تر می کند.

    آپشن های پیشرفته : TypeScript از آپشن های پیشرفته جاوا اسکریپت مانند decorators و async/await پشتیبانی می‌کند و همچنین آپشن های ی را که در جاوا اسکریپت موجود نیستند، مانند interfaces ، enums و tuples را معرفی می‌کند.

    Refactoring : ابزار TypeScript باعث می‌شود که پایگاه‌های کد بزرگ‌تر مجدداً ایمن‌تر و قابل پیش‌بینی‌تر شوند. می توانید با اطمینان تغییرات بزرگی ایجاد کنید.

    پذیرش تدریجی : TypeScript ابر مجموعه ای از جاوا اسکریپت است، به این معنی که شما می توانید به تدریج TypeScript را در پروژه های خود استفاده کنید. می‌توانید با تغییر نام فایل‌های .js خود به .ts شروع کنید و سپس می‌توانید به‌تدریج یادداشت‌های نوع را به دلخواه اضافه کنید.

    جامعه و اکوسیستم : TypeScript جامعه و اکوسیستم رو به رشدی دارد. بسیاری از کتابخانه های محبوب جاوا اسکریپت، مانند React و Angular، دارای تعاریف TypeScript هستند که استفاده از آنها را در پروژه TypeScript آسان تر می کند.

تولید کد

کد TypeScript به طور بومی توسط مرورگرها یا Node.js قابل درک نیست، پس باید به جاوا اسکریپت منتقل شود. این فرآیند انتقال توسط کامپایلر TypeScript ( tsc ) انجام می شود که کد TypeScript را می خواند و کد جاوا اسکریپت معادل را تولید می کند.

برای ترانسپایل کردن یک فایل TypeScript، می توانید از دستور tsc و به دنبال آن نام فایل استفاده کنید:

 $ tsc index.ts

این دستور فایل index.ts را به فایل index.js در همان دایرکتوری تبدیل می کند. کد جاوا اسکریپت به دست آمده را می توان در هر محیط جاوا اسکریپت مانند مرورگر یا Node.js اجرا کرد.

تماشای تغییرات فایل

در طول توسعه فعال، مفید است که هر زمان که تغییراتی ایجاد می کنید، کد TypeScript شما به طور خودکار دوباره کامپایل شود. کامپایلر TypeScript یک گزینه --watch را برای این منظور فراهم می کند:

 $ tsc index.ts --watch

با این دستور، کامپایلر فایل index.ts را زیر نظر گرفته و هر زمان که تغییری را تشخیص داد، به طور خودکار آن را کامپایل می کند.

پیکربندی کامپایلر TypeScript

برای پروژه های بزرگتر، داشتن یک فایل پیکربندی، tsconfig.json ، برای مدیریت گزینه های کامپایلر معمول است. این فایل به شما امکان می دهد فایل های سطح ریشه و گزینه های کامپایلر مورد نیاز برای کامپایل پروژه را مشخص کنید.

در اینجا نمونه ای از فایل tsconfig.json آمده است:

 { "compilerOptions": { "target": "es5", "module": "commonjs", "strict": true, "outDir": "./dist" }, "include": ["src/**/*.ts"], "exclude": ["node_modules"] }

در این پیکربندی، شی compilerOptions شامل گزینه هایی برای کامپایلر است. گزینه target نسخه هدف ECMAScript را مشخص می کند، گزینه module سیستم ماژول را تنظیم می کند، گزینه strict طیف گسترده ای از رفتار تحلیل نوع را فعال می کند و گزینه outDir فهرست خروجی فایل های جاوا اسکریپت کامپایل شده را مشخص می کند.

گزینه های include و exclude به ترتیب برای تعیین فایل هایی که باید کامپایل و نادیده گرفته شوند استفاده می شود.

برای کامپایل پروژه بر اساس فایل tsconfig.json ، می توانید دستور tsc را بدون هیچ آرگومان اجرا کنید:

 $ tsc

این دستور تمام فایل های TypeScript در پروژه را مطابق با گزینه های مشخص شده در فایل tsconfig.json کامپایل می کند.

مبانی TypeScript

در این بخش، اصول اولیه TypeScript را تحلیل می کنیم. نمونه های بیشتری از نحوه تایپ استاتیک تایپ اسکریپت را مشاهده خواهید کرد و در مورد ابزار و تحلیل خطاهای آن بیشتر خواهید آموخت.

نصب و راه اندازی

قبل از اینکه وارد TypeScript شویم، باید مطمئن شوید که Node.js را روی سیستم خود نصب کرده اید. Node.js یک محیط زمان اجرا است که به شما امکان می دهد جاوا اسکریپت را خارج از مرورگر اجرا کنید. می توانید Node.js را از وب سایت رسمی دانلود کنید.

پس از نصب Node.js، می‌توانید TypeScript را با استفاده از Node Package Manager (npm) نصب کنید که همراه با Node.js ارائه می‌شود.

ترمینال خود را باز کنید و دستور زیر را اجرا کنید:

 npm install -g typescript

این دستور TypeScript را به صورت سراسری بر روی سیستم شما نصب می کند. می توانید با اجرای دستور tsc که مخفف compiler TypeScript است، نصب را تأیید کنید:

 tsc --version

این دستور باید نسخه ای از TypeScript را که شما نصب کرده اید نمایش دهد.

اکنون که TypeScript نصب شده است، ما آماده هستیم تا سفر خود را به دنیای TypeScript آغاز کنیم!

پیکربندی

عالیه اکنون که TypeScript را نصب کرده ایم، بیایید در مورد چیز مهم دیگری صحبت کنیم: configuration . برای پروژه های بزرگتر، داشتن یک فایل پیکربندی، tsconfig.json ، برای مدیریت گزینه های کامپایلر معمول است. این فایل به شما امکان می دهد فایل های سطح ریشه و گزینه های کامپایلر مورد نیاز برای کامپایل پروژه را مشخص کنید.

هنگامی که دستور tsc اجرا می کنید، کامپایلر به دنبال یک فایل tsconfig.json در دایرکتوری فعلی می گردد. اگر یکی را پیدا کرد، از گزینه های مشخص شده در فایل برای کامپایل پروژه استفاده می کند. اگر یکی را پیدا نکرد، از گزینه های پیش فرض استفاده می کند.

برای تولید فایل tsconfig.json می توانید دستور زیر را اجرا کنید:

 tsc --init

آشنایی با tsconfig.json

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

برای ایجاد یک فایل tsconfig.json ، می توانید از دستور tsc --init همانطور که در بالا نشان دادم استفاده کنید. این دستور یک فایل tsconfig.json در فهرست فعلی شما با برخی تنظیمات پیش فرض ایجاد می کند.

در اینجا مثالی از شکل ظاهری یک فایل tsconfig.json آورده شده است:

 { "compilerOptions": { "target": "es5", "module": "commonjs", "strict": true, "outDir": "./dist" }, "include": ["src/**/*.ts"], "exclude": ["node_modules"] }

در این پیکربندی:

شیء compilerOptions حاوی تنظیماتی برای کامپایلر TypeScript است.

گزینه target به کامپایلر می گوید که کد شما را در کدام نسخه ECMAScript کامپایل کند.

گزینه module سیستم ماژول را برای پروژه شما تنظیم می کند.

گزینه strict طیف گسترده ای از رفتار تحلیل نوع را فعال می کند.

گزینه outDir دایرکتوری را مشخص می کند که فایل های جاوا اسکریپت کامپایل شده در آن قرار می گیرند.

گزینه های include و exclude به کامپایلر می گویند که کدام فایل ها را در طول فرآیند کامپایل شامل و حذف کند.

پس از راه اندازی فایل tsconfig.json ، می توانید پروژه TypeScript خود را به سادگی با اجرای دستور tsc در ترمینال خود کامپایل کنید. این دستور تمام فایل های TypeScript را در پروژه شما با توجه به گزینه های مشخص شده در فایل tsconfig.json کامپایل می کند.

تایپ اعلان ها و متغیرها در TypeScript

بیایید اکنون در مورد انواع بیشتر بدانیم. TypeScript از چندین نوع از جمله number ، string ، boolean ، object ، null ، undefined ، symbol ، bigint و any پشتیبانی می کند. بیایید هر یک از این انواع را با جزئیات تحلیل کنیم.

    number : این نوع برای مقادیر عددی استفاده می شود. می تواند یک عدد صحیح یا مقدار ممیز شناور باشد.

مثال:

 let age: number = 30; let weight: number = 65.5;

    string : این نوع برای داده های متنی استفاده می شود. می توان آن را با استفاده از گیومه های تکی، نقل قول های دوتایی یا الفبای الگو تعریف کرد.

مثال:

 let name: string = 'John Doe'; let greeting: string = `Hello, ${name}`;

    boolean : این نوع برای مقادیر منطقی استفاده می شود. فقط می تواند true یا false باشد.

مثال:

 let isAdult: boolean = true; let isStudent: boolean = false;

    object : این نوع برای ساختارهای داده پیچیده استفاده می شود. یک شی می تواند دارای ویژگی ها و روش هایی باشد.

مثال:

 let person: object = { name: 'John Doe', age: 30 }; let date: object = new Date();

    null : این نوع فقط یک مقدار دارد: null . زمانی استفاده می شود که بخواهید به طور صریح یک متغیر را بدون مقدار یا شی تنظیم کنید.

مثال:

 let emptyValue: null = null; let anotherEmptyValue: null = null;

    undefined : این نوع فقط یک مقدار دارد: undefined . زمانی استفاده می شود که متغیری اعلام شده باشد اما هنوز مقداری به آن اختصاص داده نشده باشد.

مثال:

 let unassignedValue: undefined = undefined; let anotherUnassignedValue: undefined;

    symbol : این نوع برای ایجاد شناسه های منحصر به فرد برای اشیا استفاده می شود.

مثال:

 let symbol1: symbol = Symbol('symbol1'); let symbol2: symbol = Symbol('symbol2');

    bigint : این نوع برای اعداد کامل بزرگتر از 2^53 - 1 استفاده می شود که حد بالایی برای نوع number است.

مثال:

 let bigNumber: bigint = 9007199254740993n; let anotherBigNumber: bigint = BigInt(9007199254740993);

    any : این نوع زمانی استفاده می شود که نوع یک متغیر می تواند هر چیزی باشد. این راهی برای انصراف از تحلیل نوع است.

مثال:

 let variable: any = 'I am a string'; variable = 42; // I am a number now

اکنون اجازه دهید در مورد روش های مختلفی که می توانید متغیرها را در TypeScript اعلام کنید صحبت کنیم.

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

    نوع مستعار : نام مستعار نوع راهی برای ایجاد یک نام جدید برای یک نوع موجود است. آنها اغلب برای تعریف انواع پیچیده که در مکان های متعدد استفاده می شوند استفاده می شوند.

مثال:

 type Point = { x: number; y: number; } let origin: Point = { x: 0, y: 0 };

در این مثال، Point یک نوع نام مستعار برای یک شی با ویژگی های x و y است. برای تعریف نوع شی origin استفاده می شود.

    انواع تقاطع : انواع تقاطع راهی برای ترکیب چندین نوع در یک نوع واحد است. آنها اغلب برای ایجاد انواع پیچیده که دارای خواص چندین نوع دیگر هستند استفاده می شوند.

مثال:

 type Printable = { print: () => void; }; type Loggable = { log: () => void; }; type Logger = Printable & Loggable; let logger: Logger = { print: () => console.log('Printing...'), log: () => console.log('Logging...'), };

در این مثال Printable و Loggable دو نوع هستند که به ترتیب دارای روش print و log هستند. نوع Logger تقاطع Printable و Loggable است، پس هم روش print و هم log دارد.

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

مثال:

 type ID = string | number; let id: ID = '123'; id = 123;

در این مثال، ID یک نوع اتحاد است که می تواند یک string یا یک number باشد. از آن برای تعریف نوع متغیر id استفاده می شود که می تواند یک string یا یک number به آن اختصاص داده شود.

    Type Assertions : Type Assertions راهی است برای اینکه به کامپایلر TypeScript بگوییم که شما در مورد نوع یک مقدار بیشتر از آن می دانید. آنها شبیه به نوع ریخته گری در زبان های دیگر هستند.

مثال:

 let value: any = 'Hello, TypeScript!'; let length: number = (value as string).length;

در این مثال، کلمه کلیدی as برای بیان اینکه value از نوع string است استفاده می شود. این به ما امکان می دهد به ویژگی length رشته دسترسی پیدا کنیم.

توابع در TypeScript

توابع بلوک های سازنده هر زبان برنامه نویسی هستند. آنها منطق را در واحدهای قابل استفاده مجدد از کد کپسوله می کنند و استفاده مجدد و مدولار بودن کد را ارتقا می دهند. در TypeScript، توابع را می توان با استفاده از کلمه کلیدی function یا توابع پیکان ( => ) تعریف کرد. هر دو روش موارد استفاده و ویژگی های خاص خود را دارند.

بیایید در مورد برخی از انواع توابع در TypeScript صحبت کنیم:

    اعلان های تابع : توابع را می توان با استفاده از کلمه کلیدی function و به دنبال آن یک نام تابع منحصر به فرد اعلام کرد. بدنه تابع در پرانتزهای مجعد {} محصور شده است.

مثال:

 function greet(name: string): void { console.log(`Hello, ${name}!`); } greet('Alice'); // Outputs: Hello, Alice!

در این مثال، greet تابعی است که یک پارامتر، name ، از نوع string را می گیرد. تابع هیچ چیزی را بر نمی گرداند، پس نوع بازگشت آن void است.

    توابع پیکان : توابع پیکان نحو مدرن تری برای نوشتن توابع در TypeScript و JavaScript هستند. آنها به ویژه هنگام نوشتن توابع کوچک و درون خطی مفید هستند.

مثال:

 const greet = (name: string): void => { console.log(`Hello, ${name}!`); } greet('Bob'); // Outputs: Hello, Bob!

در این مثال، greet یک تابع فلش است که دقیقاً مانند تابع greet در مثال قبلی عمل می کند. نماد => پارامترهای تابع و بدنه تابع را از هم جدا می کند.

    انواع توابع : در TypeScript می توانید نوع پارامترها و مقدار بازگشتی یک تابع را مشخص کنید. این امر ایمنی نوع را فراهم می‌کند و تضمین می‌کند که تابع با انواع آرگومان‌های صحیح فراخوانی می‌شود و نوع صحیح مقدار را برمی‌گرداند.

مثال:

 function add(a: number, b: number): number { return a + b; } let sum: number = add(1, 2); // sum is 3

در این مثال، تابع add دو پارامتر a و b را می گیرد که هر دو از نوع number هستند و یک number برمی گرداند.

    پارامترهای اختیاری و پیش فرض : TypeScript اجازه می دهد تا پارامترهای تابع اختیاری باشند یا مقادیر پیش فرض داشته باشند.

مثال:

 function greet(name: string, greeting: string = 'Hello'): void { console.log(`${greeting}, ${name}!`); } greet('Charlie'); // Outputs: Hello, Charlie! greet('Charlie', 'Hi'); // Outputs: Hi, Charlie!

در این مثال، تابع greet دارای دو پارامتر name و greeting است. پارامتر greeting اختیاری است و مقدار پیش‌فرض «Hello» دارد.

    Rest Parameters : TypeScript از پارامترهای استراحت پشتیبانی می کند که به شما امکان می دهد تعداد دلخواه آرگومان را به یک تابع ارسال کنید.

مثال:

 function sum(...numbers: number[]): number { return numbers.reduce((a, b) => a + b, 0); } let total: number = sum(1, 2, 3, 4, 5); // total is 15

در این مثال، تابع sum تعداد دلخواه آرگومان را می گیرد و مجموع آنها را برمی گرداند.

کلاس ها و اشیا در TypeScript

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

TypeScript از کلاس هایی پشتیبانی می کند که با استفاده از کلمه کلیدی class اعلام می شوند. یکی از مزیت های کلاس های TypeScript این است که از ویژگی های برنامه نویسی شی گرا (OOP) مانند inheritance ، encapsulation و polymorphism پشتیبانی می کنند.

    اعلان کلاس : در TypeScript، کلاس ها با استفاده از کلمه کلیدی class اعلان می شوند.

مثال:

 class Person { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } greet(): void { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); } } let john = new Person('John', 25); john.greet(); // Outputs: Hello, my name is John and I am 25 years old.

در این مثال، Person یک کلاس با دو ویژگی name و age و یک متد greet است. constructor یک متد خاص برای ایجاد و مقداردهی اولیه یک شی ایجاد شده با یک کلاس است.

    وراثت : TypeScript از وراثت پشتیبانی می کند، مکانیزمی برای پایه گذاری یک کلاس بر کلاس دیگر، با حفظ پیاده سازی مشابه. وراثت با استفاده از کلمه کلیدی extends به دست می آید.

مثال:

 class Employee extends Person { department: string; constructor(name: string, age: number, department: string) { super(name, age); this.department = department; } greet(): void { super.greet(); console.log(`I work in ${this.department}.`); } } let jane = new Employee('Jane', 30, 'HR'); jane.greet(); // Outputs: Hello, my name is Jane and I am 30 years old. I work in HR.

در این مثال، Employee کلاسی است که Person گسترش می دهد. یک department اموال جدید اضافه می کند و روش greet را لغو می کند. کلمه کلیدی super برای فراخوانی متدهای مربوط به کلاس والد استفاده می شود.

    کلاس‌های انتزاعی : کلاس‌های انتزاعی کلاس‌هایی هستند که نمی‌توانند مستقیماً نمونه‌سازی شوند. آنها به عنوان کلاس های پایه برای کلاس های دیگر استفاده می شوند و می توانند حاوی متدهای انتزاعی باشند که باید توسط کلاس های مشتق شده پیاده سازی شوند.

مثال:

 abstract class Shape { abstract area(): number; } class Circle extends Shape { radius: number; constructor(radius: number) { super(); this.radius = radius; } area(): number { return Math.PI * this.radius ** 2; } } let circle = new Circle(5); console.log(circle.area()); // Outputs: 78.54

در این مثال، Shape یک کلاس انتزاعی با area متد انتزاعی است. کلاس Circle Shape گسترش می دهد و متد area را پیاده سازی می کند. کلاس های انتزاعی برای تعریف یک رابط مشترک برای مجموعه ای از کلاس ها مفید هستند.

    کپسوله‌سازی : کپسوله‌سازی مجموعه داده‌ها (ویژگی‌ها) و روش‌هایی است که بر روی داده‌ها (روش‌ها) در یک واحد واحد به نام کلاس عمل می‌کنند. در TypeScript، کپسوله‌سازی با استفاده از اصلاح‌کننده‌های دسترسی مانند عمومی، خصوصی و محافظت شده به دست می‌آید.

مثال:

 class Person { private name: string; protected age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } greet(): void { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); } } let john = new Person("John", 25); console.log(john.name); // Error: Property "name" is private console.log(john.age); // Error: Property "age" is protected

در این مثال، name یک ویژگی خصوصی کلاس Person است، پس از خارج از کلاس قابل دسترسی نیست. age یک ویژگی محافظت شده است، پس می توان از زیر کلاس ها به آن دسترسی داشت اما از خارج از کلاس نمی توان به آن دسترسی داشت.

    چند شکلی : چندشکلی توانایی یک جسم برای به خود گرفتن اشکال مختلف است. در TypeScript، چندشکلی از طریق overriding متد به دست می‌آید، که در آن یک متد در یک زیر کلاس دارای نام و امضای یکسان با متد در سوپرکلاس خود است.

مثال:

 class Animal { speak(): void { console.log('Animal makes a sound'); } } class Dog extends Animal { speak(): void { console.log('Dog barks'); } } let animal: Animal = new Dog(); animal.speak(); // Outputs: Dog barks

در این مثال، Animal یک کلاس پایه با متد speak است. Dog یک زیرمجموعه است که روش speak را نادیده می گیرد. هنگامی که یک نمونه از Dog به متغیری از نوع Animal اختصاص داده می شود، متد speak of Dog فراخوانی می شود.

    Access Modifiers : TypeScript از اصلاح کننده های دسترسی public ، private و protected پشتیبانی می کند. به طور پیش فرض، هر عضو public است.

مثال:

 class Animal { private name: string; constructor(name: string) { this.name = name; } public getName(): string { return this.name; } } let dog = new Animal('Dog'); console.log(dog.getName()); // Outputs: Dog

در این مثال، name یکی از اعضای خصوصی کلاس Animal است. فقط در کلاس Animal قابل دسترسی است. متد getName عمومی است، پس می توان آن را از خارج از کلاس فراخوانی کرد.

رابط ها در TypeScript

رابط ها در TypeScript روش های قدرتمندی برای تعریف قراردادها در کد شما هستند. آنها برای تحلیل تایپ کردن اینکه آیا یک شی با یک ساختار خاص مطابقت دارد یا خیر استفاده می شود.

با تعریف یک رابط، می‌توانیم ترکیب خاصی از متغیرها را نام‌گذاری کنیم و مطمئن شویم که همیشه به‌عنوان یک مجموعه استفاده می‌شوند.

    اعلان رابط : رابط ها با کلمه کلیدی interface اعلان می شوند.

مثال:

 interface Person { name: string; age: number; } let john: Person = { name: 'John', age: 25 };

در این مثال، Person یک رابط است که یک شی را توصیف می کند که name string و age نوع number دارد.

    ویژگی های اختیاری : ویژگی های رابط را می توان به عنوان اختیاری با ? .

مثال:

 interface Person { name: string; age?: number; } let alice: Person = { name: 'Alice' };

در این مثال، age یک ویژگی اختیاری در رابط Person است. شیء alice با وجود اینکه age ندارد هنوز یک Person است.

    انواع توابع : رابط ها همچنین می توانند انواع توابع را توصیف کنند.

مثال:

 interface GreetFunction { (name: string, age: number): string; } let greet: GreetFunction = function(name: string, age: number): string { return `Hello, my name is ${name} and I am ${age} years old.`; };

در این مثال، GreetFunction رابطی است که تابعی را توصیف می‌کند که name و age می‌گیرد و یک string برمی‌گرداند.

    گسترش رابط ها : رابط ها می توانند یکدیگر را گسترش دهند و یک رابط جدید ایجاد کنند که اعضای رابط پایه را به ارث می برد.

مثال:

 interface Animal { name: string; } interface Dog extends Animal { breed: string; } let myDog: Dog = { name: 'Rex', breed: 'German Shepherd' };

در این مثال، Dog Animal را گسترش می دهد، پس یک Dog هم name دارد و هم یک breed .

Enums در TypeScript

Enums راهی برای تعریف مجموعه ای از ثابت های نامگذاری شده است. آنها اغلب برای نشان دادن مجموعه ای از مقادیر مرتبط، مانند روزهای هفته یا ماه های سال استفاده می شوند.

TypeScript از شماره های عددی و رشته ای پشتیبانی می کند و روشی انعطاف پذیر برای تعریف و کار با مجموعه ای از ثابت ها ارائه می دهد.

    Enums عددی : عدد عددی راهی برای تعریف مجموعه ای از ثابت های نامگذاری شده با مقادیر عددی است. به طور پیش فرض، مقادیر ثابت ها از 0 شروع می شود و برای هر ثابت بعدی 1 افزایش می یابد.

مثال:

 enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } let today: Day = Day.Monday;

در این مثال، Day یک عدد عددی است که نشان دهنده روزهای هفته است. به ثابت های Sunday ، Monday ، Tuesday و غیره مقادیر عددی با شروع از 0 اختصاص داده می شود.

    Enums رشته‌ها : رشته‌های enum راهی برای تعریف مجموعه‌ای از ثابت‌های نام‌گذاری شده با مقادیر رشته هستند. برخلاف enum های عددی، مقادیر ثابت ها در enum رشته ای با مقدار نام ثابت مقدار دهی اولیه می شوند.

مثال:

 enum Month { January = 'January', February = 'February', March = 'March', April = 'April', May = 'May', June = 'June', July = 'July', August = 'August', September = 'September', October = 'October', November = 'November', December = 'December' } let currentMonth: Month = Month.June;

در این مثال، Month یک عدد رشته ای است که ماه های سال را نشان می دهد. به ثابت های January ، February ، March و غیره مقادیر رشته ای برابر با نام آنها اختصاص داده می شود.

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

مثال:

 enum Color { Red = 1, Green = Math.pow(2, 2), Blue = Math.pow(2, 3) } let color: Color = Color.Green;

در این مثال، Color یک عدد با مقادیر محاسبه شده است. با استفاده از تابع Math.pow به ثابت های Red ، Green و Blue به ترتیب مقادیر 1، 4 و 8 اختصاص داده می شود.

    Reverse Mapping : Enum ها در TypeScript از نگاشت معکوس پشتیبانی می کنند، به این معنی که می توانید از مقدار آن به نام یک ثابت دسترسی پیدا کنید. این برای اهداف اشکال زدایی و ورود به سیستم مفید است.

مثال:

 enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } let dayName: string = Day[1]; // 'Monday'

در این مثال، Day enum برای دسترسی به نام استفاده می شود

ژنریک در TypeScript

Generics راهی برای تعریف یک تابع یا کلاس است که می تواند با انواع مختلف داده استفاده شود. آنها اغلب برای ایجاد اجزای قابل استفاده مجدد استفاده می شوند که می توانند با انواع مختلف داده ها کار کنند.

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

اکنون به چند نمونه از توابع و کلاس های عمومی نگاه می کنیم.

    توابع عمومی : توابع عمومی توابعی هستند که می توانند با انواع داده ها کار کنند. آنها با استفاده از پارامترهای نوع تعریف می‌شوند، که محل‌هایی برای انواع واقعی هستند که هنگام فراخوانی تابع استفاده می‌شوند.

مثال:

 function identity<T>(value: T): T { return value; } let result1: number = identity<number>(42); let result2: string = identity<string>('Hello, TypeScript!');

در این مثال، identity یک تابع عمومی است که یک پارامتر نوع T را می گیرد و مقداری از نوع T را برمی گرداند. پارامتر type T برای تعیین نوع آرگومان و مقدار بازگشتی استفاده می شود.

    کلاس های عمومی : کلاس های عمومی کلاس هایی هستند که می توانند با انواع داده ها کار کنند. آنها با استفاده از پارامترهای نوع تعریف می‌شوند، که مکان‌هایی برای انواع واقعی هستند که در زمان نمونه‌سازی کلاس استفاده می‌شوند.

مثال:

 class Box<T> { value: T; constructor(value: T) { this.value = value; } } let box1: Box<number> = new Box<number>(42); let box2: Box<string> = new Box<string>('Hello, TypeScript!');

در این مثال، Box یک کلاس عمومی است که یک پارامتر نوع T را می گیرد و دارای value خاصیت نوع T است. پارامتر نوع T برای تعیین نوع مقدار ذخیره شده در کادر استفاده می شود.

    محدودیت‌های عمومی : محدودیت‌های عمومی راهی برای محدود کردن انواعی هستند که می‌توانند با یک تابع یا کلاس عمومی استفاده شوند. آنها با استفاده از کلمه کلیدی extends و به دنبال آن نوع یا رابطی که پارامتر type باید گسترش دهد، تعریف می شوند.

مثال:

 interface Printable { print(): void; } function printValue<T extends Printable>(value: T): void { value.print(); } class Person implements Printable { print(): void { console.log('Printing person...'); } } let person: Person = new Person(); printValue(person);

در این مثال، Printable یک رابط است که یک روش print را تعریف می کند. تابع printValue یک تابع عمومی است که یک پارامتر نوع T را می گیرد که باید Printable گسترش دهد. کلاس Person رابط Printable را پیاده سازی می کند.

در این مرحله شما یک درک اولیه از TypeScript دارید و می توانید شروع به غواصی در مفاهیم پیشرفته تر کنید.

نتیجه گیری

در این مقاله با اصول TypeScript آشنا شدید.

ما در مورد نحو اصلی TypeScript مانند متغیرها، توابع و کلاس ها صحبت کردیم.

شما همچنین با انواع داخلی TypeScript مانند اعداد، رشته ها و بولی ها آشنا شدید.

ما در مورد شمارش‌های داخلی TypeScript، مانند شماره‌های اعداد، شماره‌های رشته‌ها و شماره‌های محاسبه‌شده بحث کردیم. و شما در مورد انواع عمومی TypeScript، مانند توابع و کلاس های عمومی آشنا شدید.

با تشکر از شما برای خواندن!

خبرکاو

ارسال نظر

دیدگاه‌ها بسته شده‌اند.


تبليغات ايهنا تبليغات ايهنا

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