تاریخ انتشار: جمعه, ۲ خرداد ۱۳۹۹، ۱۰:۱۱ ق.ظ نویسنده: محمدیان
تاریخ انتشار: جمعه, ۲ خرداد ۱۳۹۹، ۰۷:۵۸ ق.ظ نویسنده: محمدیان

static:

از قابلیت های ES6 است و بنابراین در تایپ اسکریپت نیز وجود دارد.

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

<className> . <StaticPeroperty>

اعضای استاتیک با کلمه کلیدی static تعریف میشوند.

class Circle{
    static pi:number = 3.14;
}

console.log(Circle.pi);

متودهای استاتیک:

class Circle{
    static pi:number = 3.14;
    static calculateArea(radius:number){
        return this.pi*radius*radius;
    }
}

console.log(Circle.calculateArea(5))

در متود calculateArea با کلمه کلیدی this به خاصیت pi دسترسی پیدا کردیم. میتوانستیم به جای this از نام کلاس یعنی Circle هم استفاده کنیم. استفاده از هر دو روش امکان پذیر است.

this.pi // معمولا وقتی استفاده میشود که هم متود وهم خاصیت، هر دو استاتیک هستند
Circle.pi // معمولا وقتی استفاده میشود که متود استاتیک نیست ولی خاصیت استاتیک است

نکته مهم :

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

تصور کنید یک کلاس فقط شامل خواص و متودهای استاتیک باشد، بنابراین نمیتوان از آن کلاس یک شئ ایجاد کرد چون هیچ رفتار خاصی از هیچ نوعی از خودش بروز نمیدهد. در چنین کلاسی بهتر است خواص و متودهای Helper یا کمکی تعریف کنیم که عمومی هستند و به سایر اعضای کلاس های ما وابستگی ندارند.

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

 

تاریخ انتشار: جمعه, ۲ خرداد ۱۳۹۹، ۰۶:۳۱ ق.ظ نویسنده: محمدیان

استفاده از کلاس ها برای ایجاد اشیا

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

public : پیشفرض - هم در خود کلاس و هم در خارج کلاس قابل دسترسی و استفاده است.

protected : فقط درون کلاس جاری(خود کلاس) و فرزندان کلاس قابل دسترسی است. یعنی در کلاس های فرزند نیز میتوان با کلمه کلیدی this به خواص و متودهای protected دسترسی داشت.

private : فقط و فقط در خود کلاس قابل استفاده است و حتی فرزندان کلاس نمیتوانند به خواص و متودهای private دسترسی داشته باشند.

 

مثال کلاس :

class Person {
    name:string; // default is public accesor
    private type:string;
    protected age:number;

    constructor(name:string,public userName:string){
        this.name = name;
    }
}

const person = new Person("Mokhtar","Mohammadiyan");
console.log(person)
console.log(person.name)

نکنه مهم : پارامترهایی که در constructer تعریف میشوند هم خواص کلاس هستند که به صورت ورودی دریافت میشوند.

متودهای درون کلاس و دسترسی به یکدیگر

class Person {
    name:string; // default is public accesor
    private type:string;
    protected age:number;

    constructor(name:string,public userName:string){
        this.name = name;
        this.age = 34;
    }

    printAge():void{
        this.setType("Old Guy");
        console.log(this.age);
    }

    setType(type:string):void{
        this.type = type;
        console.log(this.type);
    }
}

const person = new Person("Mokhtar","Mohammadiyan");
person.printAge();
person.setType("Old");

اگر متود setType را به صورت private تعریف کرده بودیم، فقط در داخل کلاس قابل استفاده بود و در مثال فوق ما پیغام خطای کامپایلر مواجه میشدیم. 

تاریخ انتشار: جمعه, ۲ خرداد ۱۳۹۹، ۰۴:۵۶ ق.ظ نویسنده: محمدیان
تاریخ انتشار: جمعه, ۲ خرداد ۱۳۹۹، ۰۳:۵۳ ق.ظ نویسنده: محمدیان

انواع داده

اگر نوع متغیر را مشخص نکنیم به صورت خودکار نوع داده any به آن اختصاص داده میشود.

let myName:string = "Mokhtar";
let myAge:number = 34;
let hasAnimal:boolean = false;

let newName; // نوع این متغیر به صورت پیشفرض any میباشد

آرایه ها و نوع داده آرایه

let arr:any[]; // این آرایه میتواند شامل هر نوع داده ای باشد
let arr2:number[]; // این آرایه فقط میتواند شامل اعضای عددی باشد
let arr3:string[];// این آرایه فقط میتواند شامل اعضای رشته ای  باشد
let arr4:(string|number)[]; // اعضای این آرایه میتوانند هم عددی و هم رشته ای باشند

نوع داده توپلس Tuples

آرایه که شامل تعداد مشخصی عضو با نوع داده مشخص میباشد.

let address:[string,number];// این آرایه فقط باید 2 عضو داشته باشد که اولی رشته و دومی عددی است
address = ['Tehran',52]; 

مثال دیگر:

let address2:[(string|number),number];
address2 = ['56',52]; 

در مثال فوق تعیین کردیم که عضو اول آرایه میتواند هم رشته و هم عدد باشد.

نوع داده Enum - قابل شمارش

یک نوع داده ای تعریف شده توسط برنامه نویس را که به آن نوع داده شمارش میگویند، ایجاد میکند، نحوه ایجاد یک نوع داده شمارش به صورت زیر است:

enum enumName {const1,const2,const3,...,constn}

به صورت پیشفرض مقداردهی ثابت ها با 0 شروع میشود.

برخی کاربردهای enum مثل: فصل ها، روزهای هفته، رنگ ها، روزهای ماه، ماه های سال

مثال های enum:

enum TrueFalse{
    false, // به صورت خودکار مقدارش برابر 0 است
    true //  به صورت خودکار مقدارش برابر 1 است
}

مثال بعدی:

enum Days{
    SAT = 1,
    SUN,
    MON,
    TUE,
    WED,
    THU,
    FRI
}

در مثال فوق چون مقدار SAT را برابر 1 قرار دادیم، به صورت خودکار مقادیر بعدی 2و3 و ..7 میشوند.

* نکته : بهتر است ثابت ها را با حروف بزرگ تعریف کنیم تا با متغیرها اشتباه نشوند.

enum Colors{
    BLACK = 2,
    GREEN = 4,
    RED = 3,
    BLUE = 5,
    GRAY, // مقدار ندارد اما چون مقدار قبلی 5 است ، مقدار 6 به آن تعلق میگیرد
    WHITE = 0
}

در ضمن میتوانیم نوع داده فوق را به یک متغیر اختصاص دهیم که یعنی متغیر ما از نوع Colors است و فقط مقداری از همین نوع را میپذیرد.مثال:

let myColor:Colors = Colors.RED;
console.log(myColor)

نوع داده Any

اگر به یک متغیر هیچ نوع داده ای ندهیم. نوع اولین مقدار به آن اختصاص پیدا میکند و اگر بعداً این نوع تغییر کند کامپایلر خطا میگیرد. اما اگر از همان ابتدا نوع داده any را به آن بدهیم هیچ مشکلی بوجود نمی آید.

let car:any= "BMW";
console.log(car);
car = {brand:"BMW",series:3};
console.log(car)

نوع داده Never

نوع داده Never میگوید که هیچ دستوری قرار نیست اجرا شود و هیچ داده ای قرار نیست برگشت داده شود. هیچوقت. مثال:

function errorLog():never{
    throw new Error('این یک پیغام خطای سفارشی است');
}

مجوز داشتن چندین نوع

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

let orType:string|number|boolean|number[]|object;

نکته مهم : 

اگر یک متغیر میتواند مقدار null داشته باشد باید مشخص کنیم.مثال:

let canBeNull:number|null;
    canBeNull = 12;
    canBeNull = null;

یا اینکه در تنظیمات کامپایلر مشخص کنیم که متغیرهایی که نوع داده null گرفته اند، چشم پوشی کند. یا کلا null رو بی خیال شود و خطا نگیرد.