معرفی TypeScript برای توسعه دهندگان سی شارپ

یکشنبه 4 تیر 1396

TypeScript دقیقا چیست؟ اولین چیزی که بسیار مهم است برای به خاطر سپردن TypeScript (بصورت خلاصه TS) یک جایگزین برای جاوا اسکریپت نیست!! با وجود اینکه خیلی ها ممکن است این را بگویند.

معرفی TypeScript برای توسعه دهندگان سی شارپ

TypeScript دقیقا چیست؟

اولین چیزی که بسیار مهم است برای به خاطر سپردن TypeScript (بصورت خلاصه TS) یک جایگزین برای جاوا اسکریپت نیست!! با وجود اینکه خیلی ها ممکن است این را بگویند.

 

TS دقیقا یک توصیف به عنوان super set از extension های زبان جاوا اسکریپت است که به شما این اجازه را می دهد از چندین ویژگی زبان های جدید استفاده کنید. مثلا شما می خواهید از زبان سی شارپ استفاده کنید.

آن به عنوان یک super set کلاس بندی شده است، بیشتر به این دلیل که جایگزین خیلی چیز ها باشد، خیلی چیز ها به ان اضافه کرد و آن ها را بهتر کرد.

به طرق مختلف، این نیز یک Transpiler است، زیرا بسیاری از ویژگی های جاوااسکریپت ES6/7 را در کد Front-End استفاده می کند و در عین حال سازگاری بسیار مناسبی با مرورگرهای غیر سازگار با ES6/7 دارد.

اساسا، شما می توانید کد را با استفاده از اصطلاح جدید cutting edge syntax بنویسید، اما خروجی تولید شده برای مرورگر های قدیمی جاوا اسکریپت را چندبار اجرا می کند.

یکی دیگر از محصولات نامتعارف که ممکن است نام آن را شنیده باشید (Babel) به طور کلی یکسان است، اما به جای افزودن ویژگی هایی به زبان به عنوان TS، فقط این اجازه را می دهد تا از ویژگی های جدیدتر استفاده کنید.

بنابراین دقیقا TS چه حزبی به حساب می آید؟

خب، در ابتدا آن یک نوع امن را پدید می آورد.

یکی از چیزهایی که توسعه دهندگان سی شارپ ممکن است دوست داشته باشند، این است که زبانشان Type Safety است. یک رشته دقیقا یک رشته است و یک عدد صحیح، عدد صحیح است. اگر تلاش کنید که این دو را با یکدیگر ترکیب کنید، به مشکل بر می خورید.

 

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

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

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

1. public int ID { get; set; } 2. public string Name { get; set; } 3. public string Description { get; set; }

این به این معنا است که ما می توانیم هرچیزی به عدد صحیح ID، نام و توضیحات اختصاص دهیم. با استفاده از جاوااسکریپت می توانیم کد زیر را داشته باشیم:

1. public ID: number; 2. public Name: string; 3. public Description: string;

از این نقطه به بعد، اگر شما سعی کنید یک رشته به ID اختصاص دهید، یا یک شماره به نام/توضیحات اختصاص دهید، مفسر TS از اجرا شدن آن جلوگیری می کند و خروجی توسط جاوا اسکریپت داده نمی شود و به شما خطاهایی نمایش می دهد تا کدتان را قبل از انتشار تصحیح کنید.

 

این دلیل اصلی معرف TS است – بنابراین توسعه دهندگانی که برنامه هایی با ASP.NET MVC می سازند، جاییکه ممکن است هم front-end و back-end با یکدیگر کار کنند، توانایی نگهداری از type safety را برقرار می کند. از اینجا به بعد نگاه نزدیک تری به این زبان می اندازیم.

 

چه زمانی یک عدد، عدد است؟

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

 

به دلیل اینکه عمیقا این کدها توسط مرورگر ها کنترل می شود، حتی TS نمی تواند در این موضوع کمک کند، بنابراین یک عدد، همیشه یک عدد است.

در حقیقا جاوا اسکریپت تنها سه نوع زیر را می شناسد:

Number

String

Boolean

هرچیزی که این دو را نادیده بگیرد، از نوع شئ generic است.

تنها کاری که TS می تواند در این موضوع به ما کمک کند، این است که به ما اجازه می دهد نوع های خودمان را بسازیم.

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

1. public interface CustomType { 2.   public ID: number; 3.   public Name: string; 4.   public Description: string; 5. }

این به شما اجازه می دهد خواص و متغیر های معمولی TS را بصورت زیر در بیاورید:

public myData:CustomType;

یا

let myData:CustomType = null;

اگر شما از یک کلاس به جای یک inteface استفاده می کنید، شما همچنین می توانید getter و setter برای آن تعریف کنید، که به شما این اجازه را می دهد چیزهایی مانند float، decimal و نوع های عددی دیگری را نیز تعریف کنید.

همه این type safety ها پس از آن اجرا خواهند شد و مانند گذشته به سه نوع شناخته می شوند.

البته ویژگی مخصوص دیگری نیز در TypeScript وجود دارد که می توانید از ان استفاده کنید و ان هم نوع ANY است. ANY دقیقا به این معنا است که – نوع می تواند به هر داده ای که شما انتخاب می کنید تخصیص داده شود و این دقیقا مانند همان un-typed جاوا اسکریپت است.

برای مثال زمانی که شما داده ای بارگذاری می کند در سرویس Back-End، شما می توانید بصورت normal از json برای فرمت انتقال داده استفاده کنید. به همین دلیل JSON نمی تواند نوع اطلاعات را حمل کند، تنها ساختار آن به تعیین نوع خواص کمک می کند. اما نه در شئ کلی، خصوصا اگر شما یک API داشته باشید که در ان خواص در داخل شئ تغییر کند.

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

در صورت تمایل میتوانید از آموزش تایپ اسکریپت سایت تاپ لرن دیدن کنید .

آموزش سی شارپ

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید