اینترفیس ها در زبان برنامه نویسی TypeScript
یک interface قرار داد سینتکسی است که باید توسط موجودیت هایی که از آن استفاده می کنند، پیادهسازی شود. به عبارت سادهتر اینترفیس چگونگی پیادهسازی یک موجودیت را مشخص می کند. اینترفیس برخلاف کلاس فقط شامل اعلان پراپرتی ها، متدها و رویداد ها است. وظیفه پیادهسازی و تعریف موارد تعریف شده در اینترفیس بر عهده کلاسی است که از آن مشتق شده است.
شیء زیر را در نظر بگیرید:
1 2 3 4 5 | var person = { FirstName:"Tom", LastName:"Hanks", sayHi: ()=>{ return "Hi"} }; |
امضای شیء فوق می تواند به این شکل باشد:
1 2 3 4 5 | { FirstName:string, LastName:string, sayHi()=>string } |
برای استفاده مجدد از این امضا برای شیء ها می توانیم آن را به صورت یک Interface تعریف کنیم.
اعلان اینترفیس
برای اعلان یک اینترفیس در زبان برنامه نویسی تایپ اسکریپت از کلمه کلیدی interface استفاده می کنیم. در زیر می توانید سینتکس مربوط به اعلان اینترفیس را مشاهده کنید:
1 2 | interface interface_name { } |
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | interface IPerson { firstName:string, lastName:string, sayHi: ()=>string } var customer:IPerson = { firstName:"Tom", lastName:"Hanks", sayHi: ():string =>{return "Hi there"} } console.log("Customer Object ") console.log(customer.firstName) console.log(customer.lastName) console.log(customer.sayHi()) var employee:IPerson = { firstName:"Jim", lastName:"Blakes", sayHi: ():string =>{return "Hello!!!"} } console.log("Employee Object ") console.log(employee.firstName); console.log(employee.lastName); |
در مثال فوق ما یک رابط (Interface) به نام IPerson را اعلان کردیم و شیء های customer و employee این اینترفیس را پیادهسازی کرده اند.
زمانی کد فوق کامپایل شود، خروجی زیر را تولید خواهد کرد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //Generated by typescript 1.8.10 var customer = { firstName: "Tom", lastName: "Hanks", sayHi: function () { return "Hi there"; } }; console.log("Customer Object "); console.log(customer.firstName); console.log(customer.lastName); console.log(customer.sayHi()); var employee = { firstName: "Jim", lastName: "Blakes", sayHi: function () { return "Hello!!!"; } }; console.log("Employee Object "); console.log(employee.firstName); console.log(employee.lastName); |
خروجی مثال:
1 2 3 4 5 6 7 8 | Customer object Tom Hanks Hi there Employee object Jim Blakes Hello!!! |
از آنجا که interface در زبان برنامه جاوا اسکریپت وجود ندارد، در هنگام کامپایل نیز هیچ خروجی تولید نمی کند. تصویر زیر گویایی این موضوع است:
نوع Union و Interface
مثال زیر نحوه استفاده نوع Union و Interface را نشان می دهد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | interface RunOptions { program:string; commandline:string[]|string|(()=>string); } //commandline as string var options:RunOptions = {program:"test1",commandline:"Hello"}; console.log(options.commandline) //commandline as a string array options = {program:"test1",commandline:["Hello","World"]}; console.log(options.commandline[0]); console.log(options.commandline[1]); //commandline as a function expression options = {program:"test1",commandline:()=>{return "**Hello World**";}}; var fn:any = options.commandline; console.log(fn()); |
کد فوق بعد از کامپایل شدن:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //Generated by typescript 1.8.10 //commandline as string var options = { program: "test1", commandline: "Hello" }; console.log(options.commandline); //commandline as a string array options = { program: "test1", commandline: ["Hello", "World"] }; console.log(options.commandline[0]); console.log(options.commandline[1]); //commandline as a function expression options = { program: "test1", commandline: function () { return "**Hello World**"; } }; var fn = options.commandline; console.log(fn()); |
خروجی مثال:
1 2 3 4 | Hello Hello World **Hello World** |
اینترفیس ها و آرایه ها
مثال زیر نحوه تعریف و استفاده از آرایه در اینترفیس را نشان می دهد. اندیس آرایه می تواند از نوع رشته یا عددی باشد.
1 2 3 4 5 6 7 8 9 10 11 12 | interface namelist { [index:number]:string } var list2:namelist = ["John",1,"Bran"] //Error. 1 is not type string interface ages { [index:string]:number } var agelist:ages; agelist["John"] = 15 // Ok agelist[2] = "nine" // Error |
اینترفیس ها و ارث بری
در زبان برنامه نویسی TypeScript یک اینترفیس می تواند از یک یا چند اینترفیس دیگر ارث بری کند.
سینتکس ارث بری ساده:
1 | Child_interface_name extends super_interface_name |
سینتکس ارث بری چندگانه:
1 2 | Child_interface_name extends super_interface1_name, super_interface2_name,…,super_interfaceN_name |
مثال (ارث بری ساده):
1 2 3 4 5 6 7 8 9 10 11 12 | interface Person { age:number } interface Musician extends Person { instrument:string } var drummer = <Musician>{}; drummer.age = 27 drummer.instrument = "Drums" console.log("Age: "+drummer.age) console.log("Instrument: "+drummer.instrument) |
کد فوق بعد از کامپایل شدن:
1 2 3 4 5 6 | //Generated by typescript 1.8.10 var drummer = {}; drummer.age = 27; drummer.instrument = "Drums"; console.log("Age: " + drummer.age); console.log("Instrument: " + drummer.instrument); |
خروجی مثال:
1 2 | Age: 27 Instrument: Drums |
مثال (ارث بری چندگانه):
1 2 3 4 5 6 7 8 9 10 11 | interface IParent1 { v1:number } interface IParent2 { v2:number } interface Child extends IParent1, IParent2 { } var Iobj:Child = { v1:12, v2:23} console.log("value 1: "+this.v1+" value 2: "+this.v2) |
کد فوق بعد از کامپایل شدن:
1 2 3 | //Generated by typescript 1.8.10 var Iobj = { v1: 12, v2: 23 }; console.log("value 1: " + this.v1 + " value 2: " + this.v2); |
خروجی مثال:
1 | value 1: 12 value 2: 23 |
هیچ نظری ثبت نشده است