برنامه نویسی

تایپ اسکریپت: رابط – انجمن DEV

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

این یک سری کامل از تایپ اسکریپت ها خواهد بود که در آن شما از موضوعات اساسی مانند رشته، بولی تا پیچیده تر مانند Type Aliases، enums، Interface، Generics و غیره یاد خواهید گرفت.

فهرست مطالب

رابط

یک اعلامیه رابط راه دیگری برای نامگذاری یک نوع شی است. شما می توانید آن را با استفاده از interface کلمه کلیدی:

interface User {
    name: string,
    age: number,
}

// ✅ CORRECT
let newUser : User = {name: "John", age: 28};
// ❌ ERROR: property 'age' is missing
let newUser : User = {name: "John"};
// ❌ ERROR: missing the following properties from type 'User': name, age 
let newUser : User = {};
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

همچنین می توانید استفاده کنید readonly و رویکرد اختیاری در interface:

interface User {
    readonly id: number     // readonly variable
    name: string,
    age: number,
    specialKey? : string,   // optional 
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

همچنین می توانید توابع را به interface، دو راه برای این کار وجود دارد:

// Method-1
interface User {
    getDiscount(coupon: string): number     
}

// For Both you need to call this like this:
const newUser: User = {
    getDiscount: (coupon: "KIJ298DD9J") => {
        return 10;
    }
}

// Method-2
interface User {
    getDiscount: (coupon: string) => number
}

// 👉 You see I have changed the 'coupon' to 'couponName'
// You don't need to match the name of the parameter here
// It will take care of it
const newUser: User = {
    getDiscount: (couponName: "KIJ298DD9J") => {
        return 10;
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

که در روش 1 شما به سادگی می توانید از () برای گفتن عملکردی مانند این دارد: getDiscount(): number و string انواع برگشتی هستند و هیچ آرگومان نمی‌گیرد.

که در روش 2 ما از یک تابع فلش مانند استفاده می کنیم getDiscount: () => number.

رابط در مقابل نوع

نام مستعار و رابط های تایپ بسیار شبیه به هم هستند و در بسیاری از موارد، می توانید آزادانه بین آنها یکی را انتخاب کنید. تقریبا تمام ویژگی های یک interface در دسترس هستند type تمایز کلیدی این است که نمی توان یک نوع را برای افزودن ویژگی های جدید در مقابل رابطی که همیشه قابل گسترش است، دوباره باز کرد.

بیایید با چند مثال آنها را متمایز کنیم:

افزودن فیلدهای جدید

که در interface شما می توانید فیلدهای جدیدی را به رابط موجود اضافه کنید، اما نمی توانید فیلدهای جدیدی را به نوع موجود اضافه کنید. خطا خواهد کرد.

رابط

interface User {
    id: string;    
    email: string;
}

interface User {
    name: string;
}

// Now you can add all the three values to the User interface
const user: User = {
    id: "2323232",
    email: "foo@email.com",
    name: "Foo";
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تایپ کنید

type User = {
    id: string;
}

type User = {
    email: string;
}

// ❌ ERROR: Duplicate identifier "User"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

که در interface می توانید فیلدهای جدید اضافه کنید و آنها را هر طور که می خواهید تغییر دهید، اما در type شما نمی توانید این کار را انجام دهید یک بار در type ایجاد شده است، نمی توان آن را تغییر داد.

تمدید می شود

برای گسترش از قبل تعریف شده interface یا type هر دو رویکرد متفاوتی دارند. interface استفاده می کند extends کلمه کلیدی، در حالی که type از تقاطع استفاده می کند.

رابط

interface Car {
    model: string;
    color: string;
}

// 👇 You can extend an interface using 'extends' keywords
interface Tesla extends Car {
  autoPilotModelName: string;
};

// ✅ Use Case
const newCar: Tesla = {
    model: "S",
    color: "red",
    autoPilotModelName: "xyz"
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوع

type Car = {
    model: string;
    color: string;
}
// 👇 In type you need to use Intersection
type Tesla = Car & {
  autoPilotModelName: string;
};

const newCar: Tesla = {
    model: "S",
    color: "red",
    autoPilotModelName: "xyz"
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اتحاد. اتصال

که در interface شما نمی توانید یک نوع اتحادیه ایجاد کنید، اما اگر از آن استفاده می کنید می توانید این کار را انجام دهید type. بیایید مثالی بزنیم:

رابط

interface User  {
    email: string;
}

interface Admin  {
    email: string;
    adminKey: string;
}

// ❌ ERROR: '{' expected.
interface Person = User | Admin;

// ✅ CORRECT: you can create union type like this
type Person = User | Admin;

// ✅ CORRECT: However you can use union type inside the interface
interface Person {
    person: User | Admin;
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوع

type User = {
    email: string;
}

type Admin = {
    email: string;
    adminKey: string;
}

// ✅ You can do that.
type Person = User | Admin;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مثال بالا، ممکن است متوجه شده باشید که زمانی که من سعی کردم یک نوع اتحادیه به اینترفیس اختصاص دهم (interface Person = User | Admin)، خطا داد. به این دلیل است که نمی توانید چیزی را به آن اختصاص دهید interface. نحو کاهش سرعت آن مشابه است class. اما هر دو سبک کاری متفاوتی دارند.

class MyClass {}

interface Hello {}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بسته شدن

در این مقاله توضیح داده ام که چیست interface است و نحوه استفاده از آن، همراه با تفاوت بین type و interface. این مقاله به شما درک اساسی از رابط را می دهد.

این مجموعه ای از درس های Typescript است که به شما کمک می کند تایپ اسکریپ را از ابتدا یاد بگیرید. اگر از این مقاله لذت بردید، فراموش نکنید که برای استفاده بعدی، ❤️ و نشانک 🏷️را بدهید و اگر سوال یا بازخوردی دارید، در نظرات زیر دریغ نکنید. در قسمت بعدی می بینمت

با من ارتباط برقرار کن

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا