معرفی

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

Boolean

نوع داده Boolean (درست/غلط) ، که جاوا اسکریپت و تایپ اسکریپت پاسخ یک مقدار بولی است.

let isDone: boolean = false;

Number

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

let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;

String

یکی دیگر از بخش های اساسی ایجاد برنامه در جاوا اسکریپت برای صفحات وب و سرور به طور یکسان کار با داده های متنی است. همانند زبان های دیگر، ما با استفاده از نوع string برای اشاره به این انواع داده متنی استفاده می کنیم. درست مثل جاوا اسکریپت، تایپ اسکریپت همچنین با استفاده از دو علامت (") و یا نقل قول تکی (')  داده رشته را احاطه می کند.

let color: string = "webnegar";
color = 'red';

شما همچنین می توانید الگوی رشته، (که شامل چند خط  متن و عبارت های جاسازی شده باشد) را استفاده کنید. این رشته می تواند توسط تکیه backtick/backquote (`) احاطه شده باشد ، و یا به صورت عبارت های جاسازی شده به فرم $ {عبارت} باشد.

let fullName: string = `Ehsan Mohsenpourian`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ fullName }.

I'll be ${ age + 1 } years old next month.`

This is equivalent to declaring sentence like so:

let sentence: string = "Hello, my name is " + fullName + ".\n\n" +
    "I'll be " + (age + 1) + " years old next month."

آرایه  (Array)

تایپ اسکریپت، مانند جاوا اسکریپت، اجازه می دهد آرایه ای از انواع  داده داشته باشید. نوع آرایه را می توان به یکی از دو روش زیر نوشت.

  • روش اول ا با استفاده از نوع عناصر به دنبال [] به معنی آرایه ای از نوع عنصر:
let list: number[] = [1, 2, 3];
  • راه دوم استفاده از یک نوع آرایه عمومی، آرایه <elemType>:
let list: Array<number> = [1, 2, 3];

 (چند تایی)Tuple

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

// Declare a tuple type
let x: [string, number];
// Initialize it
x = ["hello", 10]; // OK
// Initialize it incorrectly
x = [10, "hello"]; // Error

برای  دسترسی به یک عنصر با شاخص (که خود یک عدد صحیح است) بازیابی می شود:

console.log(x[0].substr(1)); // OK
console.log(x[1].substr(1)); // Error, 'number' does not have 'substr'

When accessing an element outside the set of known indices, a union type is used instead:

x[3] = "webnegar"; // OK, 'string' can be assigned to 'string | number'

console.log(x[5].toString()); // OK, 'string' and 'number' both have 'toString'

x[6] = true; // Error, 'boolean' isn't 'string | number'

نوع Union موضوع پیشرفته ای است که ما در فصل بعد آن را توضیح می دهیم.

(شمارشی ) Enum

یکی از انواع داده مفید در جاوا اسکریپت، نوع شمارشی (مجموعه ای استاندارد از انواع داده) است. مثل  زبان هایی مانند C #، یک نوع شمارشی (Enum) یک راه برای  نام دادن مملوس تر (خواناتر) به مجموعه ای از مقادیر عددی است.

enum Color {Red, Green, Blue};
let c: Color = Color.Green;

به طور پیش فرض، enum ها شمارش  اعضای خود را  از 0 آغاز می کنند. شما می توانید این را به صورت دستی با تنظیم مقدار یکی از اعضای Enum، آن را تغییر دهید. به عنوان مثال، در مثال قبلی به جای پیش فرض عدد 0 عدد یک را قرار دهید.

enum Color {Red = 1, Green, Blue};
let c: Color = Color.Green;

و یا حتی به صورت دستی تنظیم تمام اندیکس (شاخص) مقادریر را خود مشخص کنید.

enum Color {Red = 1, Green = 2, Blue = 4};
let c: Color = Color.Green;

یکی از ویژگی های تنظیم دستی در enum ها این است که شما  می توانید با یک مقدار عددی در enum به نام مقدار آن، دست یابید. برای مثال، اگر اندیکس  مقدارمورد نظر ما در شمارشی (enum )2  بود، اما مطمئن نیستید که چه رنگی به این مقدار انتساب داده شده است ، می توانید اندیکس مقدار داده 2 را در enum  پیدا کنید

enum Color {Red = 1, Green, Blue};
let colorName: string = Color[2];

alert(colorName);

Any

موقع نوشتن یک برنامه کاربردی در حال اجرا ممکن است به یک نوع داده احتیاج داشته باشیم که نمی دانیم از چه نوع است، این داده ها ممکن است از محتوای پویای برنامه بدست آید. به عنوان مثال داده های کاربر و یا داده های کتابخانه شخص ثالث (3rd party library). در این مواقع از کنترل نوع استفاده می کنیم و اجازه می دهیم که در زمان اجرا ارزش مقادیر بررسی شوند. برای این کار از نوع any استفاده می کنیم.

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean

any یک راه قدرتمند برای کار با جاوااسکریپت های موجود است، چرا که به شما اجازه استفاده از کنترل نوع در زمان کامپایل را می دهد. ممکن است شما از نوع object انتظار نقشی مشابه any داشته باشد ولی نوع object به شما اختصاص هر نوع داده را می دهد و نمی توانید متد های آن نوع را فرا خوانی کنید حتی آن هایی که واقعا وجود داشته باشند.

let notSure: any = 4;
notSure.ifItExists(); // okay, ifItExists might exist at runtime
notSure.toFixed(); // okay, toFixed exists (but the compiler doesn't check)

let prettySure: Object = 4;
prettySure.toFixed(); // Error: Property 'toFixed' doesn't exist on type 'Object'.

نوع داده any حتی در زمانی که قسمتی از نوع داده را بدانید ولی همه نوع داده را ندانید، به راحتی قابل استفاده است.

let list: any[] = [1, true, "free"];

list[1] = 100;

Void

Void تا حدی مخالف any است. در حالت نبودن هیچ نوع از دادهء از نوع Void استفاده می شود. معمولا این را به عنوان نوع بازگشت از توابع  هیچ مقداری را باز نمی گرداند بشناسید.

function warnUser(): void {
    alert("This is my webnegar course message");
}

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

let unusable: void = undefined;

Null and Undefined

در تایپ اسکریپت، هر دو تعریف نشده (Undefined) و پوچ (Null) در واقع نوع مخصوص به خود را دارند. بسیار شبیه به void، آنها خود به خود بسیار مفید نیست:

// Not much else we can assign to these variables!
let u: undefined = undefined;
let n: null = null;

به طور پیش فرض پوچ و تعریف نشده زیرمجموعه ای از همه انواع دیگر هستند. این بدان معناست که شما می توانید به عنوان مثال به نوع عددی مقدار (Null) پوچ و تعریف نشده (Undefined) را اختصاص دهید. با این حال، در هنگام استفاده از  --strictNullChecks flag مقادیر (Null)  و (Undefined) را تنها می توان به نوع داده   Void و انواع مربوطه آن اختصاص داد. این کار باعث جلوگیری از خیلی از خطاهای معمول می شود. در مواردی که بخواهید در نوع string مقادر null  و یا Undefined قرار دهید، می توانید از نوع داده ای union  به صورت (string | null | undefined) استفاده کنید. به عنوان یک نکته: بهتر است تا جای ممکن از --strictNullChecks استفاه کنید، اما در این مطلب ما فرض می کنیم چنین امکان فعال نیست.

Never

نوع  never نشان دهنده انواع مقادیری است که هرگز رخ نمی دهد. به عنوان مثال،  never نوع بازگشتی برای بیان توابعی است که یک استثنا بر می گردانند و یا هیچ گاه مقداری را بر نمی گردانند. متغییر ها نیز زمانی که توسط محافظ نوع مشخص شود که هرگز نمی تواند درست باشد، محدود شده و  از نوع never می شوند. never  یک زیرگروه از تمامی انواع داده و قابل تخصیص به هر نوع داده می باشد در حالی که هیچ نوع داده(بجز نوع خودش) از نوع never و یا قابل تخصیص به آن نمی باشد (بر عکس آن ممکن نیست). حتی نوع any نیز قابل تخصیص به  never نیست.

// Function returning never must have unreachable end point
function error(message: string): never {
    throw new Error(message);
}

// Inferred return type is never
function fail() {
    return error("webnegar:Something failed");
}

// Function returning never must have unreachable end point
function infiniteLoop(): never {
    while (true) {
    }
}