اشیاء در زبان برنامه نویسی TypeScript
یک شیء نمونه ای است که شامل مجموعه ای از مقادیر key/value است. مقدار یک key می تواند شامل یک رشته، عدد، تابع، آرایه و سایر اشیاء باشد. در سینتکس مربوط به یک شیء را مشاهده می کنید:
1 2 3 4 5 6 7 8 | var object_name = { key1: “value1”, //scalar value key2: “value”, key3: function() { //functions }, key4:[“content1”, “content2”] //collection }; |
مثال:
1 2 3 4 5 6 7 | var person = { firstname:"Tom", lastname:"Hanks" }; //access the object values console.log(person.firstname) console.log(person.lastname) |
کد کامپایل شده مشابه کد فوق خواهد بود. خروجی مثال:
1 2 | Tom Hanks |
قالب نوع در TypeScript
شیء زیر را در نظر بگیرید:
1 2 3 4 | var person = { firstname:"Tom", lastname:"Hanks" }; |
حال فرض کنید می خواهید یک مقدار جدید به شیء اضافه کنید. اگر از جاوا اسکریپت استفاده می کردید، این کار به راحتی امکانپذیر بود. برای مثال در JavaScript می توانیم یک تابع را مانند نمونه زیر به یک شیء اضافه کنیم:
1 | person.sayHello = function(){ return "hello";} |
اما اگر از این روش در زبان TypeScript استفاده کنید، با خطای کامپایلر رو به رو خواهید شد. زیر در تایپ اسکریت اشیاء باید یک قالب نوع داشته باشند. برای انجام عملیات فوق می توانید به شکل زیر عمل کنید:
1 2 3 4 5 6 7 8 9 | var person = { firstName:"Tom", lastName:"Hanks", sayHello:function() { } //Type template } person.sayHello = function() { console.log("hello "+person.firstName) } person.sayHello() |
کد کامپایل شده مشابه کد فوق خواهد بود. خروحی مثال:
1 | hello Tom |
اشیاء به عنوان پارامتر تابع
شما همچنین می توانید یک شیء را به عنوان پارامتر به یک تابع ارسال کنید. مثال:
1 2 3 4 5 6 7 8 9 | var person = { firstname:"Tom", lastname:"Hanks" }; var invokeperson = function(obj: { firstname:string, lastname :string }) { console.log("first name :"+obj.firstname) console.log("last name :"+obj.lastname) } invokeperson(person) |
کد فوق بعد از کامپایل شدن:
1 2 3 4 5 6 7 8 9 10 11 12 | //Generated by typescript 1.8.10 var person = { firstname: "Tom", lastname: "Hanks" }; var invokeperson = function (obj) { console.log("first name :" + obj.firstname); console.log("last name :" + obj.lastname); }; invokeperson(person); |
خروجی مثال:
1 2 | first name :Tom last name :Hanks |
اشیاء Anonymous
شما می توانید یک شیء ناشناس (Anonymous) را به عنوان پارامتر یک تابع ارسال کنید. مثال:
1 2 3 4 5 | var invokeperson = function(obj:{ firstname:string, lastname :string}) { console.log("first name :"+obj.firstname) console.log("last name :"+obj.lastname) } invokeperson({firstname:"Sachin",lastname:"Tendulkar"}); |
کد فوق بعد از کامپایل شدن:
1 2 3 4 5 6 7 | //Generated by typescript 1.8.10 var invokeperson = function (obj) { console.log("first name :" + obj.firstname); console.log("last name :" + obj.lastname); }; invokeperson({ firstname: "Sachin", lastname: "Tendulkar" }); |
خروجی مثال:
1 2 | first name :Sachin last name :Tendulkar |
Duck-typing در تایپ اسکریپت
duck-typing به این معنا است که اگر دو شیء مشخصات یکسانی داشته باشند، هم نوع در نظر گرفته می شوند. برای درک بهتر مفهوم duck-typing به عبارت زیر توجه کنید:
“وقتی پرنده ای را می بینم که مانند یک اردک راه می رود، مانند یک اردک شنا می کند و صدایش مانند اردک است، پس آن پرنده را اردک می نامیم.”
مثال زیر نشان می دهد که ما می توانیم شیء که به صورت مستقیم یک اینترفیس را پیادهسازی نکرده است، اما شامل تمام موارد مورد نیاز است را به عنوان پارامتر به تابع ارسال کنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | interface IPoint { x:number y:number } function addPoints(p1:IPoint,p2:IPoint):IPoint { var x = p1.x + p2.x var y = p1.y + p2.y return {x:x,y:y} } //Valid var newPoint = addPoints({x:3,y:4},{x:5,y:1}) //Error var newPoint2 = addPoints({x:1},{x:4,y:3}) |
هیچ نظری ثبت نشده است