Window.pipedriveLeadboosterConfig = { القاعدة: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', الإصدار: 2, } ؛(الدالة () { var w = نافذة إذا كان (w.LeadBooster) { console.warn('LeadBooster موجود بالفعل') } وإلا { { w.LeadBooster = { q: [], على: دالة (ن، ح) { { هذا.q.push({ t: 'o'، n: n، n: n، h: h }) }, الزناد: الدالة (n) { هذا.q.push({ t: 't'، n: n: n }) }, } } })() الجينات العامة في TypeScript - The Codest
The Codest
  • نبذة عنا
  • الخدمات
    • تطوير البرمجيات
      • تطوير الواجهة الأمامية
      • تطوير الواجهة الخلفية
    • Staff Augmentation
      • مطورو الواجهة الأمامية
      • مطورو الواجهة الخلفية
      • مهندسو البيانات
      • مهندسو السحابة
      • مهندسو ضمان الجودة
      • أخرى
    • استشاري
      • التدقيق والاستشارات
  • الصناعات
    • التكنولوجيا المالية والمصرفية
    • E-commerce
    • أدتك
    • التكنولوجيا الصحية
    • التصنيع
    • الخدمات اللوجستية
    • السيارات
    • إنترنت الأشياء
  • القيمة مقابل
    • CEO
    • CTO
    • مدير التوصيل
  • فريقنا
  • دراسات الحالة
  • اعرف كيف
    • المدونة
    • اللقاءات
    • ندوات عبر الإنترنت
    • الموارد
الوظائف تواصل معنا
  • نبذة عنا
  • الخدمات
    • تطوير البرمجيات
      • تطوير الواجهة الأمامية
      • تطوير الواجهة الخلفية
    • Staff Augmentation
      • مطورو الواجهة الأمامية
      • مطورو الواجهة الخلفية
      • مهندسو البيانات
      • مهندسو السحابة
      • مهندسو ضمان الجودة
      • أخرى
    • استشاري
      • التدقيق والاستشارات
  • القيمة مقابل
    • CEO
    • CTO
    • مدير التوصيل
  • فريقنا
  • دراسات الحالة
  • اعرف كيف
    • المدونة
    • اللقاءات
    • ندوات عبر الإنترنت
    • الموارد
الوظائف تواصل معنا
السهم الخلفي العودة إلى الوراء
2020-05-26
تطوير البرمجيات

الجينات في TypeScript

ماتيوس ستانيوك

توفر الأجناس العامة أجزاء من التعليمات البرمجية القابلة لإعادة الاستخدام والتي تعمل مع عدد من الأنواع بدلاً من نوع واحد. توفر الأجناس العامة طريقة للتعامل مع النوع كمتغير وتحديده عند الاستخدام، على غرار معلمات الدالة.

يمكن استخدام الأجناس العامة بالاقتران مع الدوال (إنشاء دالة عامة)، والفئات (إنشاء فئة عامة)، والواجهات (إنشاء واجهة عامة).

الاستخدام الأساسي

على الأرجح أنك استخدمت الأجناس العامة في الماضي حتى دون معرفة ذلك - الاستخدام الأكثر شيوعًا للأجناس العامة هو إعلان مصفوفة:

const myArray: سلسلة[];

لا يبدو الأمر مميزاً جداً للوهلة الأولى، نحن نعلن فقط مصفوفتي كمصفوفة من السلاسل، ولكنّه نفس التعريف العام:

const myArray: مصفوفة ;

إبقاء الأمور واضحة

لنبدأ بمثال بسيط للغاية - كيف يمكننا نقل دالة JS الفانيليا هذه إلى TypeScript:

دالة getPrefiledArray(حشو، طول) {
    إرجاع (مصفوفة جديدة (الطول)).filler(filler);
}

ستُعيد هذه الدالة مصفوفة مملوءة بكمية محددة من حشولذا، فإن الطول سيكون العدد وستعيد الدالة بأكملها مصفوفة من حشو - ولكن ما هو الحشو؟ في هذه المرحلة يمكن أن يكون أي شيء، لذا فإن أحد الخيارات هو استخدام أي:

دالة getPrefiledArray(الحشو: أي، الطول: رقم): أي[] {
    إرجاع (مصفوفة جديدة (الطول)).ملء (حشو);
}

استخدام أي عام بالتأكيد - يمكننا تمرير أي شيء حرفيًا، لذا فإن "العمل مع عدد من الأنواع بدلًا من نوع واحد" من التعريف مغطى بالكامل، ولكننا نفقد الصلة بين حشو ونوع الإرجاع. في هذه الحالة، نريد إرجاع شيء شائع، ويمكننا تعريف هذا الشيء الشائع صراحةً على أنه معلمة النوع:

دالة getPrefiledArray(الحشو: T، الطول: رقم): T[] {
    إرجاع (مصفوفة جديدة (الطول)).filler(حشو);
}

واستخدامها هكذا:

const prefilledArray = getPrefiledArray(0, 10);

القيود العامة

لننظر إلى حالات مختلفة ربما أكثر شيوعًا. لماذا نستخدم الأنواع في الدوال؟ بالنسبة لي، هو للتأكد من أن الوسيطات التي تمرر إلى الدالة سيكون لها بعض الخصائص التي أريد التفاعل معها.

مرة أخرى دعنا نحاول نقل دالة الفانيلا JS البسيطة إلى TS.

دالة getLength(الشيء) {
    إرجاع طول الشيء;
}

لدينا معضلة غير بديهية - كيف نتأكد من أن الشيء لديه الطول الملكية، وقد تكون الفكرة الأولى هي القيام بشيء مثل:

دالة getLength(الشيء: نوع من المصفوفة):رقم {
    إرجاع طول الشيء;
}

واعتمادًا على السياق قد يكون ذلك صحيحًا، وعمومًا نحن عامون بعض الشيء - ستعمل مع مصفوفات من أنواع متعددة، ولكن ماذا لو لم نكن نعرف حقًا ما إذا كان الشيء يجب أن يكون مصفوفًا دائمًا - ربما يكون الشيء ملعب كرة قدم أو قشرة موز؟ في هذه الحالة، علينا في هذه الحالة أن نجمع الخصائص المشتركة لذلك الشيء في بنية يمكنها تحديد خصائص كائن - واجهة:

واجهة IThingWithLength {
  الطول: رقم;
}

يمكننا استخدام IThingWithLength الواجهة كنوع من الشيء المعلمة:

دالة getLength(الشيء: IThingWithLength):رقم {
    إرجاع طول الشيء;
}

بصراحة تامة في هذا المثال البسيط، سيكون الأمر على ما يرام تمامًا، ولكن إذا أردنا أن نبقي هذا النوع عامًا، ولا نواجه المشكلة من المثال الأول يمكننا استخدام القيود العامة:

دالة getLength(الشيء: T):رقم {
    إرجاع طول الشيء;
}

واستخدامها:

واجهة IBananaPeel {
  السُمك: رقم;
  الطول: رقم;
}

const bananaPeel: IBananaPeel = {السماكة: 0.2، الطول: 3.14};
getLength(bananaPeel);

استخدام التمديدات تضمن أن T على خصائص مُعرَّفة بواسطة IThingWithLength.

الفئات العامة

حتى هذه النقطة، كنا نعمل حتى هذه اللحظة مع الدوال العامة، ولكنها ليست المكان الوحيد الذي تتألق فيه الدوال العامة، لنرى كيف يمكننا دمجها في الفصول.

أولاً دعنا نحاول تخزين مجموعة من الموز في سلة الموز:

صنف موزة {
  مُنشئ(
    الطول العام: رقم,
    لون عام: سلسلة,
    إشعاع مؤين عام: رقم
  ) {}
}

فئة سلة الموز {
  موزات خاصة: موزة[] = [];

  إضافة(موزة: موزة): باطل { {
    هذا.bananas.push(موزة);
  }
}

const bananaBasket = جديد BananaBasket();
bananaBasket.add(موزة جديدة(3.14، 'أحمر'، 10e-7));

الآن دعنا نحاول إنشاء سلة أغراض عامة، لأشياء مختلفة من نفس النوع:

فئة السلة {
  أشياء خاصة: T[] = [];

  إضافة (الشيء: T): باطل {
    this.stuff.push(thing);
  }
}

const bananaBasket = سلة جديدة<موز();

وأخيرًا، لنفترض أن السلة عبارة عن حاوية مواد مشعة ويمكننا تخزين المادة التي تحتوي على الإشعاع المؤين الممتلكات:

واجهة IR radioactive {
  الإشعاع المؤين: العدد;
}

فئة RadactiveContainer {
  مادة خاصة: T[] = [];

  إضافة (الشيء: T): باطل {
    this.stuff.push(thing);
  }
}

واجهة عامة

أخيرًا دعونا نحاول جمع كل معرفتنا وبناء إمبراطورية مشعة أيضًا باستخدام الواجهات العامة:

// تحديد السمات المشتركة للحاويات
واجهة IRadioactive {
  الإشعاع المؤين: العدد;
}


// تعريف شيء مشع
واجهة IBANANANA يمتد IRadioactive {
  الطول: رقم;
  اللون: سلسلة;
}

// تعريف شيء غير مشع
واجهة IDog {
  الوزن: رقم;
}

// تحديد واجهة للحاوية التي يمكن أن تحتوي فقط على الأشياء المشعة
الواجهة IRadioactiveContainer {
  إضافة(الشيء: T): باطل;
  getRadioactiveactive(): رقم;
}

// تعريف الفئة المنفذة لواجهة الحاوية المشعة
صنف RadioactiveContainer ينفذ IRadioactiveContainer {
  أشياء خاصة T[] = [];

  إضافة(الشيء: T): باطل {
    this.stuff.push(thing);
  }

  getRadioactiveness(): رقم {
      إرجاع this.stuff.reduce((a, b) => a + b.ionizingRadiation, 0)
  }
}

// خطأ! النوع 'IDog' لا يستوفي القيد 'IRadioactive'
// ومن الوحشي نوعًا ما تخزين الكلاب داخل الحاوية المشعة
const dogsContainer = جديد RadioactiveContainer();

// كل شيء جيد!
const radioactiveContainer = جديد RadioactiveContainer();

// تذكر أن تفرز نفاياتك المشعة - قم بإنشاء حاوية منفصلة للموز فقط
const bananasContainer = جديد RadioactiveContainer();

هذا كل شيء يا رفاق!

مقالات ذات صلة

تطوير البرمجيات

إنشاء تطبيقات ويب مستقبلية: رؤى من فريق خبراء The Codest

اكتشف كيف تتفوق شركة The Codest في إنشاء تطبيقات ويب تفاعلية قابلة للتطوير باستخدام أحدث التقنيات، وتقديم تجارب مستخدم سلسة عبر جميع المنصات. اكتشف كيف تقود خبرتنا التحول الرقمي والأعمال التجارية...

ذا كوديست
تطوير البرمجيات

أفضل 10 شركات لتطوير البرمجيات في لاتفيا

تعرّف على أفضل شركات تطوير البرمجيات في لاتفيا وحلولها المبتكرة في أحدث مقالاتنا. اكتشف كيف يمكن لهذه الشركات الرائدة في مجال التكنولوجيا المساعدة في الارتقاء بأعمالك.

thecodest
الحلول المؤسسية وحلول التوسعة

أساسيات تطوير برمجيات جافا: دليل للاستعانة بمصادر خارجية بنجاح

استكشف هذا الدليل الأساسي حول تطوير برمجيات جافا outsourcing بنجاح لتعزيز الكفاءة والوصول إلى الخبرة وتحقيق نجاح المشروع باستخدام The Codest.

thecodest
تطوير البرمجيات

الدليل الشامل للاستعانة بمصادر خارجية في بولندا

إن الطفرة في outsourcing في بولندا مدفوعة بالتقدم الاقتصادي والتعليمي والتكنولوجي، مما يعزز نمو تكنولوجيا المعلومات والمناخ الملائم للأعمال.

ذا كوديست
الحلول المؤسسية وحلول التوسعة

الدليل الكامل لأدوات وتقنيات تدقيق تكنولوجيا المعلومات

تضمن عمليات تدقيق تكنولوجيا المعلومات وجود أنظمة آمنة وفعالة ومتوافقة. تعرف على المزيد حول أهميتها من خلال قراءة المقال كاملاً.

The Codest
ياكوب جاكوب جاكوبوفيتش CTO وشريك مؤسس CTO

اشترك في قاعدة معارفنا وابقَ على اطلاع على آخر المستجدات في قطاع تكنولوجيا المعلومات.

    نبذة عنا

    The Codest - شركة دولية لتطوير البرمجيات لها مراكز تقنية في بولندا.

    المملكة المتحدة - المقر الرئيسي

    • المكتب 303 ب، 182-184 شارع هاي ستريت نورث E6 2JA
      لندن، إنجلترا

    بولندا - مراكز التكنولوجيا المحلية

    • مجمع مكاتب فابريتشنا المكتبي، أليجا
      بوكوجو 18، 31-564 كراكوف
    • سفارة الأدمغة، كونستروكتورسكا
      11, 02-673 02-673 وارسو، بولندا

      The Codest

    • الصفحة الرئيسية
    • نبذة عنا
    • الخدمات
    • دراسات الحالة
    • اعرف كيف
    • الوظائف
    • القاموس

      الخدمات

    • استشاري
    • تطوير البرمجيات
    • تطوير الواجهة الخلفية
    • تطوير الواجهة الأمامية
    • Staff Augmentation
    • مطورو الواجهة الخلفية
    • مهندسو السحابة
    • مهندسو البيانات
    • أخرى
    • مهندسو ضمان الجودة

      الموارد

    • حقائق وأساطير حول التعاون مع شريك خارجي لتطوير البرمجيات
    • من الولايات المتحدة الأمريكية إلى أوروبا: لماذا تقرر الشركات الأمريكية الناشئة الانتقال إلى أوروبا؟
    • مقارنة مراكز تطوير التكنولوجيا في الخارج: تك أوفشور أوروبا (بولندا)، آسيان (الفلبين)، أوراسيا (تركيا)
    • ما هي أهم التحديات التي تواجه CTOs ومديري تكنولوجيا المعلومات؟
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • شروط استخدام الموقع الإلكتروني

    جميع الحقوق محفوظة © 2025 بواسطة The Codest. جميع الحقوق محفوظة.

    arArabic
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek arArabic