تایپاسکریپت یک زبان متن باز منحصر به فرد است که توسط شرکت مایکروسافت توسعه داده شده و هدفش افزودن ویژگیهای جدیدتر و بهتر به زبان برنامهنویسی جاوااسکریپت بوده است. در حال حاضر میتوان مطابق با آمار دید که تایپاسکریپت در زمینههای توسعه رابط کاربری و توسعه سمت سرور به صورت گسترده مورد استفاده قرار گرفته و توانسته کاربران بسیار زیادی را به خود جذب کند.
در این مطلب از وبسایت آموزشی راکت قصد داریم در ارتباط با سوالاتی صحبت کنیم که اغلب شرکتها به هنگام استخدام یک توسعهدهنده Typescript از آنها میپرسد. البته این سوالات ثابت نبوده و ممکن است سوالاتی خارج از این موارد نیز مطرح شود اما این موارد جزو تکراریترین و پر استفادهترین سوالاتی بوده که توسط کارفرمایان مطرح شده است.
سوال اول: ویژگیهای اصلی تایپاسکریپت چیست؟
- چند سکو بودن یا Cross-Platform: کامپایلر مربوط به تایپاسکریپت را میتوانید روی سیستم عاملهای محبوبی مانند ویندوز، لینوکس و مک نصب کرد.
- ویژگیهای اکمااسکریپت ۶: تایپاسکریپت یک زبان جدا شده از جاوااسکریپت نیست بنابراین تمام ویژگیهای جاوااسکریپت را در خود دارد. یکی از ویژگیهای اصلی تایپ اسکریپت داشتن ویژگیهای مربوط به استانداردهای اکمااسکریپت است.
- شئگرا بودن: تایپاسکریپت تمام ویژگیهای مربوط به شئگرا بودن را در اختیار برنامهنویسان قرار میدهد. از این ویژگیها میتوان به کلاسها، رابطها، متدها و... اشاره کرد.
- بررسی Static-type: جاوااسکریپت یک زبان پویا است و شما را مجبور به تعیین کردن نوع داده برای متغیرها نمیکند اما تایپاسکریپت یک زبان ایستا به حساب میآید. مهمترین ویژگی این نکته آن است که خطاهای مربوط به زمان اجرا به حداقل خود میرسد.
- مطابق میل بودن: درست است که تایپاسکریپت یک زبان ایستا به حساب میآید اما شما را از استفاده کردن از روش پویا که در جاوااسکریپت وجود دارد منع نمیکند.
- دسترسی به DOM: شما درست مانند جاوااسکریپت با استفاده از تایپ اسکریپت قابلیت دسترسی به DOM را خواهید داشت. بنابراین میتوانید با استفاده از تایپاسکریپت نیز المانهای صفحهها را از طریق DOM تغییر دهید.
سوال دوم: استفاده از تایپاسکریپت چه فوایدی خواهد داشت؟
- تایپاسکریپت بیشتر از آنکه بنویسید کار میکند: معنی این جمله این است که شما با قطعه کدهای کمتری نسبت به جاوااسکریپت میتواند کارهای بیشتری را انجام دهید. در واقع تایپاسکریپت انتزاعیتر و خلاصهتر از جاوا اسکریپت است.
- از آنجایی که تایپاسکریپت یک دیباگر منحصر به فرد دارد شما میتوانید فرایند خطایابی در آن را به شیوهای آسانتر به نسبت جاوا اسکریپت انجام دهید.
- استاتیک تایپ بودن تایپ اسکریپت به ما کمک میکند تا بتوانیم کدهایمان را ساختارمندتر و قابل خواناتر بکنیم. البته تنها دلیل استفاده از این ویژگی به شکل کدنویسی ما برنمیگردد، بلکه ما در زمان اجرا شانس برخورد کردن با خطاهای کامپایلر را کمتر خواهیم داشت.
- استفادهپذیری تایپاسکریپت در بخشهای مختلف از جمله کلاینت و سرور از دیگر نکات مهم در استفاده کردن از تایپاسکریپت به شمار میرود.
سوال سوم: نوعهای دادهای داخلی در تایپاسکریپت شامل چه مواردی میشوند؟
نوع عددی: از این نوع دادهای برای نمایش و به کار بردن اعداد استفاده میشود. تمام اعداد در تایپ اسکریپت به صورت مقادیر float-piont ذخیره میشوند.
let identifier: number = value;
نوع رشتهای: از این نوع دادهای برای نمایش و ذخیره یک سلسله از کاراکترهای مختلف استفاده میشود. این کاراکترها نیز در دستهبندی یونیکد UTF-16 قرار خواهند گرفت. رشتهها در داخل تک کوتیشن و یا دابل کوتیشن قرار خواهند گرفت.
let identifier: string = " ";
نوع Boolean: نوع دادهای Boolean نماینده دو حالت منطقی True و False هستند که بیشتر در شرطها و حلقهها مورد استفاده قرار میگیرند.
let identifier: bool = Boolean value;
نوع Null: Null نماینده متغیریست که هنوز تکلیفش مشخص نیست و تعیین نشده است. در اصطلاح انگلیسی ما متغیرها را undefined مینامیم. ترجمه واژه Null در فارسی همان «خالی» است.
let num: number = null;
نوع Undefiend: نقطه شروع هر متغیری در ابتدا Undefiend بودن است. Undefiend در فارسی به معنای تعریف نشده است.
let num: number = undefined;
نوع Void: این نوع از دادهای به متدهای نسبت داده میشود که هیچ خروجی ندارند.
let unusable: void = undefined;
سوال چهارم: در حال حاضر نسخه پایدار تایپاسکریپت چیست؟
در حال حاضر نسخه پایدار تایپاسکریپت نسخه ۴.۲.۳ است. «این سوال شاید از نظرتان ارزش خاصی نداشته باشد اما نماینده آن است که شما به عنوان یک توسعهدهنده تایپاسکریپت مدام از تغییرات آن آگاهی داشته و آن را در کارهای روزانه استفاده میکنید. این مسئله مهمیست که دانستن آن قطعا کارفرما را تحت تاثیر قرار میدهد»
سوال پنجم: interface در تایپ اسکریپت چه کاری را انجام میدهد؟
Interface یا رابط در واقع یک قرارداد یا ساختار برای اشیائی که از آن رابط استفاده میکنند. برای تعریف یک رابط ما از کلمه کلیدی Interface استفاده میکنیم. داخل هر رابط یکسری متد و خاصیت تعریف شده است که برای تعریف هر یک از آنها از ساختار تعریف تابع استفاده میشود.
interface IEmployee {
empCode: number;
empName: string;
getSalary: (number) => number; // arrow function
getManagerName(number): string;
}
سوال ششم: ماژولها در تایپاسکریپت به چه معنا هستند؟
ماژولها در تایپ اسکریپت حاوی مجموعهای متغیرها، توابع، کلاس و رابطها میشود که با همدیگر ارتباط دارند. شما میتوانید از ماژول به عنوان یک کانتینر یا جعبه استفاده کنید که هر آنچه که شما برای اجرا شدن به آن نیاز دارید را در خود دارد. ماژولها را میتوانید به راحتی به قطعه کدهای خود اضافه کرده و از دستورات مربوط به آنها استفاده کنید.
module module_name{
class xyz{
export sum(x, y){
return x+y;
}
}
سوال هفتم: چگونه میتوانیم از تایپاسکریپت برای Back-End استفاده کنیم؟
ما میتوانیم با به کار بردن تایپ اسکریپت در کنار نودجیاس به راحتی از قابلیتهای توسعه سمت سرور استفاده کنیم. برای این کار به سادگی میتوانیم تایپاسکریپت را با استفاده از نودجیاس نصب کرده و از آن استفاده کنیم:
npm i -g typescript
جدای از آن در حال حاضر فریمورکهایی وجود دارند که مبتنی بر نودجیاس هستند اما برای کار با آنها نیاز دارید که حتما از سینتکس تایپاسکریپت استفاده کنید.
سوال هشتم: Type assertion در تایپاسکریپت به چه معنا هستند؟
Type assertions در تایپاسکریپت درست مانند typecasting در دیگر زبانهای برنامهنویسی عمل میکنند. البته تفاوت اصلی در این زمینه آن است که فرایند چک یا بررسی کردن داده و عملیات بازسازی اتفاق نمیافتد. Type assertion در واقع هیچ تاثیری در اجرا نداشته و تنها بصورت تمام و کمال توسط کامپایلر مورد استفاده قرار میگیرد.
Type assertion در عمل یک نوع نرمتر از typecasting است که کامپایلر را مجبور میکند تا متغیرهای تعریف شده را به عنوان یک نوع دادهای خاص معرفی کند. این کار باعث میشود تا در زمان اجرای برنامه مشکلات type error کمتری داشته باشیم.
سوال نهم: چگونه یک متغیر در Typescript تعریف میشود؟
ما میتوانیم متغیرهای تایپاسکریپتی را با استفاده از سه کلمه کلیدی var، let و const تعریف کنیم. var روشی قدیمی برای انجام چنین کاریست و به شدت وابسته به جریان scoping فعالیت میکند. در حال حاضر بهتر است برای پروژههای بزرگ از به کار بردن var خودداری کنیم چرا که باعث ایجاد مشکلات مختلفی میشود.
var num:number = 1;
روش پیشفرض و مناسب برای ایجاد متغیرها در تایپاسکریپت استفاده از کلمه کلیدی let است. let در مقایسه با حالت قدیمی خطاهای کمتری را منجر شده و میزان خوانایی کدها را افزایش میدهد.
let num:number = 1;
کلمه کلیدی const برای ایجاد ثابتها در زبانهای برنامهنویسی جاوااسکریپت و تایپاسکریپت مورد استفاده قرار میگیرد. Scope مربوط به const درست مانند کلمه کلیدی let است.
const num:number = 100;
سوال دهم: چگونه یک کلاس سازنده پایه را در کلاس فرزند فراخوانی میکنیم؟
برای انجام چنین کاری کافیست تا از تابع super() استفاده کنیم. این تابع به ما در فراخوانی کلاس مادر کمک میکند.
class Animal {
name: string;
constructor(theName: string) {
this.name = theName;
}
move(distanceInMeters: number = 0) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
}
class Snake extends Animal {
constructor(name: string) {
super(name);
}
move(distanceInMeters = 5) {
console.log("Slithering...");
super.move(distanceInMeters);
}
}
سوال یازدهم: شیوه استفاده از TypeScript Mixins را توضیح دهید؟
Mixins در واقع نمونهای از ارثبریست اما روشی که در این حالت مورد استفاده قرار میگیرد متفاوت از حالتهای دیگر است. Mixins به ما اجازه میدهد تا کلاسهای جدیدی را از ترکیب کردن کلاسهای سادهتری که قبلا ایجاد شدهاند، ایجاد کنیم.
در این حالت بجای آنکه کلاس A منجر به بزرگ شدن کلاس B شود، کلاس B از کلاس A گرفته شده و در نهایت کلاس جدیدی با کارکردهای منحصر به فرد ایجاد میشود.
سوال دوازدهم: چگونه Null و Undefined بودن کلاسها را تشخیص میدهید؟
ما میتوانیم با استفاده از روش ساده و همیشگی استفاده کردن از شروط وجود هر کدام این نوعهای دادهای را بررسی کنیم. اما از آنجایی که برای بررسی کردن undefiend نیاز به یک دستور دیگر نیاز داریم باید با استفاده از متد typeof فرایند شرط را بررسی کنیم.
سوال سیزدهم: getters/setters در جاوااسکریپت چه نقشی دارند؟
Getter و Setter نوعهای متفاوتی از متد در تایپاسکریپت هستند که به ما در ایجاد حالتهای متفاوت برای دسترسی به متغیرهای Private در برنامهها کمک میکنند.
Getter به شما اجازه میدهد که از یک مقدار استفاده کنید اما قابلیت تغییر آن را نخواهید داشت. همانگونه که از نامش پیداست شما تنها میتوانید مقدار دادهای را از آن دریافت یا Get بکنید. Setter از طرفی دیگر به شما اجازه میدهد تا مقدار نوعی جدیدی را برای متغیرها تعریف کنید اما نمیتوانید مقدار پیشین آن را مشاهده بکنید.
این دو مورد برای فرایند کپسولهسازی بسیار مهم و کاربردی هستند.
برای مثال یک کارمند شاید بتواند تعداد کارمندان داخل شرکت را مشاهده یا get کند اما نمیتواند تعداد آنها را تغییر یا Set دهد.
const fullNameMaxLength = 10;
class Employee {
private _fullName: string = "";
get fullName(): string {
return this._fullName;
}
set fullName(newName: string) {
if (newName && newName.length > fullNameMaxLength) {
throw new Error("fullName has a max length of " + fullNameMaxLength);
}
this._fullName = newName;
}
}
let employee = new Employee();
employee.fullName = "Bob Smith";
if (employee.fullName) {
console.log(employee.fullName);
}
سوال چهاردهم: چگونه میتوان کلاسی را ایجاد کرد که خارج از ماژول مادر قابل دسترس باشد؟
برای استفاده از یک کلاس در خارج از ماژولی که در آن ساخته شده است کافیست تا از دستور export استفاده کنیم.
سوال پانزدهم: چگونه یک عدد را به یک رشته تبدیل کنیم؟
درست مانند جاوااسکریپت ما میتوانیم از دستورات parseInt و parseFloat برای تبدیل کردن رشته به یک integer و یا یک float در تایپاسکریپت استفاده کنیم. جدای از این موارد شما میتوانید با علامت + نیز یک رشته را به نزدیکترین عدد مورد نظر تبدیل کنید. تفاوتی هم نمیکند که اگر عدد به صورت عادی باشد و یا اینکه اعشار باشد.
var x = "32";
var y: number = +x;
سوال شانزدهم: فایل .map چیست و چرا باید از آن استفاده کرد؟
فایل map نقشه راهیست ساختارمند که در آن شیوه تبدیل شدن کدهای تایپ اسکریپت به کدهای استفادهپذیر جاوااسکریپت توضیح داده شده است. استفاده کردن از این فایل در زمانی که کامپایلر رفتار عجیب و غریبی از خود نشان دهد میتواند بسیار مفید باشد.
ابزارهای دیباگر نیز برای رفع عیب کردن بهتر کدها از این فایل بهره میگیرند.
سوال هفدهم: کلاسها در تایپاسکریپت به چه معنا هستند؟ چگونه آنها را تعریف کنیم؟
کلاسها نماینده پارادایم شئگرایی هستند. کلاسها در خود شامل متدها و خصوصیاتی میشوند که به همدیگر مرتبط هستند. برای تعریف کلاس در تایپاسکریپت باید از کلمه کلیدی Class استفاده کنید.
سوال هجدهم: ارتباط میان جاوااسکریپت و تایپاسکریپت در چیست؟
تایپ اسکریپت یک زبان برنامهنویسی متن باز است که به عنوان یک مجموعه کمکی برای جاوااسکریپت ایجاد شده است. البته تایپاسکریپت کاملا جدا از جاوااسکریپت نبوده و شما میتوانید از قابلیتهای آن در تایپاسکریپت نیز استفاده کنید. در حال حاضر فریمورکهای جاوااسکریپتی هستند که کاملا مبتنی بر تایپاسکریپت هستند. انگولار یکی از آن فریمورکهاست.
سوال نوزدهم: JSX در تایپاسکریپت چه نقشی دارد؟
JSX یک زبان توسعه یافته برای ایجاد کدهای HTML است که شباهت بسیار زیادی با XML دارد. تایپاسکریپت در فرایند تبدیل کردن JSX به صورت مستقیم به کدهای قابل استفاده کمک میکند.
سوال بیستم: چگونه یک فایل تایپاسکریپت را کامپایل کنیم؟
برای انجام چنین کاری نیاز است که از کامپایلر tsc استفاده کنید نصب کردن این کامپایلر روشهای مختلفی دارد و آسانترین راه آن از طریق npm است.
سوالات بیشتر
میزان سوالاتی که میتواند در چنین مصاحبهای پرسیده شود بسیار زیاد است و این موضوع نیز نباید شما را نگران کند. در ادامه ما پرسشهای دیگری را مطرح میکنیم که نیاز است برای جواب دادنشان خودتان جستجو بکنید.
- چه Scopeهایی در تایپاسکریپت در دسترس هستند و تفاوتشان با جاوااسکریپت در چیست؟
- توابع Arrow و Lambda در تایپاسکریپت به چه شکلی تعریف میشوند؟
- پارامتر Rest در تایپاسکریپت چیست و به چه شکلی مورد استفاده قرار میگیرد؟
- نوع دادهای omit چه استفادهای دارد؟
- چگونه به مرحله overloading در توابع خواهیم رسید؟
- چگونه تمام خاصیتهای property یک رابط Interface را به صورت اختیاری تعریف کنیم؟
- چرا و در چه زمانی باید از کلمه کلیدی unknown استفاده کنیم؟
- دکوراتور یا Decorator چه استفادهای داشته و در چه مواقعی مورد استفاده قرار میگیرند؟
- چرا و در چه زمانی باید از کلمه کلیدی declare استفاده کنیم؟
- genericsها در تایپ اسکریپت چیستند و چه زمانی باید از آنها استفاده کنیم؟
- چه زمانی و چرا از کالکشن enum استفاده میکنیم؟
- سه تفاوت کلیدی میان جاوااسکریپت و تایپاسکریپت را نام ببرید؟
- آیا تایپاسکریپت یک زبان تابعی است؟
- تفاوت میان ماژولهای داخلی و خارجی در تایپاسکریپت چیست؟
- تفاوت میان tuple و array در تایپاسکریپت چیست؟
در پایان
تایپاسکریپت یک زبان برنامهنویسی فوقالعاده و حرفهایست که به شما در توسعه ابزارهای مختلف کمک میکند. با داشتن دانش در رابطه با جاوااسکریپت میتوانید به راحتی سراغ یادگیری آن بروید. برای یادگیری آن نیز میتوانید از دوره آموزشی «آموزش Typescript» در وبسایت راکت استفاده بکنید.
سوالاتی که در این مطلب ارائه شدند جزو سوالات کلیدی هستند که اغلب کارفرمایان از افراد مستعد استخدام میپرسند بنابراین با دانستن این موارد میتوانید با اعتماد به نفس بیشتری سراغ فرایند استخدام شدن بروید.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید