این روزها تایپ اسکریپت به محبوبترین روش برای نوشتن جاوااسکریپت تبدیل شده است. بنابراین، اگر میخواهیم شغلی مرتبط با برنامه نویسی جاوااسکریپت پیدا کنیم لازم است که تایپ اسکریپت را بلد باشیم. در این مقاله سعی کردیم تا مجموعهای از سوالات را گردآوری کنیم که برای تمرکز یادگیری روی مهمترین بخشهای تایپ اسکریپت طراحی شده است.
npm install
و npm run build
را اجرا کنیم.تایپ اسکریپت مجموعهای از ابزارهایی است که نوشتن جاوااسکریپت را سادهتر میکند.
این ابزارها عبارتند از:
.ts
و .tsx
نوشته شده است.tsc
CLI به فایلهای جاوااسکریپت تبدیل میکند.میتوانیم با مطالعه TypeScript’s Landing Page اطلاعات بیشتری در این زمینه کسب کنیم.
ما برای این که بتوانیم از تایپ اسکریپت استفاده کنیم باید Node.js را نصب کنیم. بهتر است برای نصب آن، نسخه LTS را انتخاب نماییم.
همچنین به یک ویرایشگر کد نیاز داریم که استفاده از VSCode توصیه میشود.
تایپ اسکریپت با دادن امکان تکمیل خودکار، خطاهای درون IDE و بسیاری از ویژگیهای دیگر، IDE ما را قدرتمندتر میکند.
const user = { firstName: "Angela", lastName: "Davis", role: "Professor", }; console.log(user.name); Property 'name' does not exist on type '{ firstName: string; lastName: string; role: string; }'.
همچنین این احتمال وجود دارد که ایجاد باگ نیز کمتر شود. Airbnb در سال ۲۰۱۹، متوجه شد که ۳۸٪ از باگهایی که تولید شده بود، اگر از تایپ اسکریپت استفاده میکردند با آنها مواجه نمیشدند. برای کسب اطلاعات بیشتر این گفتگو را تماشا کنید.
تایپ اسکریپت از سینتکسی استفاده میکند که در جاوااسکریپت native نیست. به عنوان مثال، تایپ اسکریپت یک کلمه کلیدی type
دارد که در جاوااسکریپت این کلمه کلیدی وجود ندارد.
از آنجایی که مرورگرها فقط جاوااسکریپت را درک میکنند، نمیتوانند فایلهای تایپ اسکریپت را اجرا کنند.
این بدان معناست که برای استفاده از تایپ اسکریپت در وب، باید فایلهای تایپ اسکریپت را قبل از ارسال به مرورگر به فایلهای جاوااسکریپت تبدیل کنیم.
برای کامپایل کردن فایلهای تایپ اسکریپت در فایلهای جاوااسکریپت، میتوانیم از tsc
CLI استفاده کنیم. برای این کار:
tsconfig.json
را به پروژه خود اضافه میکنیم (این فایل به تایپ اسکریپت میگوید چه کاری انجام دهد).tsc
را اجرا میکنیم تا فایلهای تایپ اسکریپت خود را در فایلهای جاوااسکریپت کامپایل کنیم.مطالعه راهنمای VSCode میتواند مفید باشد.
اگر بخواهیم یک اپلیکیشن فرانتاند بسازیم باید از فریمورک فرانتاند استفاده کنیم. تقریباً هر فریمورک مدرنی که انتخاب کنیم از تایپ اسکریپت OOTB(out of the box) پشتیبانی میکند.
اگر بین انتخاب فریمورکها مردد هستیم، Vite یک انتخاب عالی میتواند باشد. فریمورکهایی مانند Vite
مسئولیت تبدیل فایلهای .ts
به فایلهای .js
و همچنین بسیاری از موارد دیگر را بر عهده میگیرند.
این بدان معنی است که ما نیازی به اجرای دستی tsc
نداریم. در این مورد مطالعه مستندات Vite همینطور مقاله آموزش نصب و استفاده از Vite میتواند مفید باشد.
استفاده از تایپ اسکریپت در CI یک راه عالی است که به ما این اطمینان را میدهد پروژهای که داریم عاری از باگ خواهد بود. هنگامی که CI تنظیم شود، اگر پروژه هر گونه خطای تایپ اسکریپتی داشته باشد، CI با شکست مواجه میشود.
GitHub Actions یک راه عالی برای آزمایش این مورد است. اما ما میتوانیم از تایپ اسکریپت در هر CI مبتنی بر لینوکس، مبتنی بر ویندوز یا MacOS استفاده کنیم. به طور کلی هر جایی که Node.js اجرا شود، میتوانیم از تایپ اسکریپ هم استفاده کنیم.
برای یادگیری بهتر این قسمت ابتدا بخشهای ضروری سیستم تایپ تایپ اسکریپت را بررسی میکنیم.
اولین چیزی که بهتر است با آن آشنا شویم این است که چگونه تایپها را به پارامترهای یک تابع اضافه کنیم. این موضوع به ما این امکان را میدهد تا تایپهایی را به تابع greet
اضافه کنیم:
function greet(name: string) { console.log( "Hello, " + name.toUpperCase() + "!!" ); }
به این ترتیب تابع greet
تنها میتواند یک string
را به عنوان اولین آرگومان خود بپذیرد:
greet(42); Argument of type 'number' is not assignable to parameter of type 'string'.
تایپهای اصلی تایپ اسریپت عبارتند از string
، number
، boolean
و symbol
. اینها نشاندهنده تایپهای اولیه هستند که زبان جاوااسکریپت را تشکیل میدهند.
let example1: string = "Hello World!"; let example2: number = 42; let example3: boolean = true; let example4: symbol = Symbol();
ما همچنین آن تایپها را به متغیرها اختصاص میدهیم. این بدان معنی است که تایپ اسکریپت به ما اجازه میدهد فقط یک string
را به example1
، یک number
را به example2
و غیره اختصاص دهیم.
example1 = 42; Type 'number' is not assignable to type 'string'.
راهنمای تایپ اسکریپت اطلاعات بیشتری در مورد یادگیری strings، numbers و Booleans دارد. همینطور مطالعه مستندات MDN درمورد symbol میتواند مفید باشد.
ما همچنین میتوانیم تایپ مقدار بازگشتی یک تابع را هم تعریف کنیم. این موضوع به ما این امکان را میدهد تا تایپها را به تابع greet
اضافه کنیم:
function greet(name: string): string { return "Hello, " + name.toUpperCase() + "!!"; }
این کد به ما اطمینان میدهد که تابع greet
همیشه یک string
را return میکند:
function greet(name: string): string { return 123; Type 'number' is not assignable to type 'string'. }
مطالعه راهنمای تایپ اسکریپت میتواند برای یادگیری بهتر این بخش، مفید باشد.
در مرحله بعد، باید به تایپهای آبجکت توجه کنیم. اینها به ما اجازه میدهند تا شکل یک آبجکت را توصیف کنیم.
function printCoord(pt: { x: number; y: number; }) { console.log( "The coordinate's x value is " + pt.x ); console.log( "The coordinate's y value is " + pt.y ); } printCoord({ x: 3, y: 7 });
مطالعه بخش Object Types تایپ اسکریپت برای این بخش بسیار مفید است. همچنین مطالعه بخش properties of objects optional نیز پیشنهاد میشود.
ممکن است به این موضوع فکر کنیم که اگر یک تایپی داشته باشم که بخواهم در چندین قسمت مختلف از آن استفاده کنم، چه کاری باید انجام دهیم؟ آیا باید هر بار آن را از اول بنویسم؟
برای این کار میتوانیم از کلمه کلیدی type
استفاده کنیم تا تایپها را برای استفادههای بعدی ذخیره کنیم:
type Point = { x: number; y: number; }; function printCoord(pt: Point) {}
این امکان در تایپ اسکریپت Type Aliases نام دارد.
ما میتوانیم به دو روش مختلف آرایهها را بنویسیم. روش اول با استفاده از سینتکس []
:
let example1: string[] = ["Hello World!"]; let example2: number[] = [42];
روش دوم با استفاده از سینتکس Array<>
:
let example1: Array<string> = ["Hello World!"]; let example2: Array<number> = [42];
مطالعه راهنمای آرایه تایپ اسکریپت میتواند مفید باشد.
تاپلها آرایههایی با طول ثابت هستند که هر المنت دارای یک تایپ ثابت میباشد.
let example1: [string, number] = [ "Hello World!", ۴۲, ];
میتوانیم با مطالعه راهنمای تایپ اسکریپت درباره تاپلها اطلاعات بیشتری کسب کنیم.
میتوانیم با استفاده از سینتکس () => Type
توابع را تعریف کنیم:
type MyFunction = () => string; let example1: MyFunction = () => "Hello World!";
این روش برای تعریف callbackهای ارسال شده به توابع دیگر مفید است:
function addEventListener( event: string, callback: () => void ) { document.addEventListener(event, callback); }
میتوانیم با مطالعه راهنمای تایپ اسکریپت اطلاعات بیشتری در مورد تایپ تابع بدست بیاوریم.
ما میتوانیم setها و mapها را با استفاده از سینتکس Set<Type>
و Map<KeyType, ValueType>
تعریف کنیم:
let example1 = new Set<string>(); example1.add(42); Argument of type 'number' is not assignable to parameter of type 'string'. let example2 = new Map<string, number>(); example2.set("id", "abc"); Argument of type 'string' is not assignable to parameter of type 'number'.
این سینتکس به ما این امکان را میدهد تا تایپها را به توابع ارسال کنیم. بدون این تایپها، Map
و Set
نمیدانند چه تایپهایی باید داشته باشند.
let example1 = new Set(); // No error! example1.add(42); example1.add("abc"); let example2 = new Map(); // No error! example2.set("id", "abc");
میتوانید توابع async را با استفاده از سینتکس Promise<>
تعریف کنیم:
async function getGreeting(): Promise<string> { return "Hello World!"; }
اگر از Promise
استفاده نکنیم، تایپ اسکریپت با خطا مواجه میشود:
async function getGreeting(): string { The return type of an async function or method must be the global Promise<T> type. Did you mean to write 'Promise<string>'? return "Hello World!"; }