خصائص فئة خاصة مطبعية

يدعم الطباعه الخصائص الخاصة للفئات

التحكم في الوصول في فئات Typescript

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

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

المجالات الخاصة في جافا سكريبت؟

نعم و لا. حاليًا ، توجد مسودة عمل لمواصفات تحدد الخصائص الخاصة في فئات Javascript في المرحلة 3 ، مما يشير إلى أن التعريف النهائي مقبول ، ولكن لم يتم التأكد بعد.

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

class User {
  // A prop marked as private.
  #id;
  age;
  
  constructor(age){
    this.age = age;
    // Valid assignment, as we're 
    // within the class.
    this.#id = Math.floor(Math.random() * 1000);
  }
}

// ... Later in the code ...

const user = new User(42);
// Error! Won't work as it's private.
user.#id = 123;

الحقول الخاصة في التنصيب!

ينطبق نفس بناء الجملة على الخصائص الخاصة في Typescript. منذ الإصدار 3.8 ، يمكنك استخدام هذه الميزة للتحكم بشكل أفضل في الوصول إلى الخصائص والوظائف للمثيلات بالإضافة إلى الحقول الثابتة. الصيغة هي نفسها كما في مثال Javascript.

لحظة واحدة من فضلك ، الحقول الثابتة الخاصة؟

نعم ، لقد قرأت بشكل صحيح: يمكن أن تكون المتغيرات الثابتة والوظائف خاصة أيضًا ، مما يعني أنه لا يمكن استدعاؤها إلا داخل أعضاء الفصل. تمت إضافة هذه الميزة مع Typescript الإصدار 4.3 ، جنبًا إلى جنب مع المزيد من التغييرات تحت الغطاء. وفقًا لوثائق الإصدار 4.3 ، أصبح أعضاء الفصل الخاص الآن يتمتعون بالخصوصية حقًا في وقت التشغيل ، مما يشير إلى أن هذه الميزة قد نضجت تمامًا.

يرجى ملاحظة أن Typescript يدعم نوعين مختلفين من "private" للفصول الدراسية. الأكثر شيوعًا هو باستخدام الكلمة الأساسية "خاص" ، مما يجعل الحقول المحددة غير قابلة للوصول حتى من الفئات المشتقة.

الميزة الأخرى ، وهي الميزة الجديدة التي أعرضها هنا ، هي استخدام ما يسمى "الأسماء الخاصة". إنها نفس صيغة Javascript ، حيث تم تعريف مواصفاتها بواسطة JS في الأصل. في Typescript ، يتحكمون في الوصول أثناء وقت التشغيل.

/**
 * A class that uses already known
 * private props.
 */
class CommonUser {
  // Common 'private' prop in TS.
  private id: number;
  age: number;
  
  constructor(age: number){
    this.age = age;
    this.id = Math.floor(Math.random() * 1000);
  }
}

/**
 * Using the new sytanx for private class names.
 */
class SpecialUser {
  #id: number;
  age: number;
  
  constructor(age: number){
    this.age = age;
    // Valid, we're inside the class.
    this.#id = SpecialUser.#generateId();
  }
  
  static #generateId(){
    return Math.floor(Math.random() * 1000);
  }
  
  #stringifyId(){
    return this.#id.toString();
  }
}

// ... Later in the code ...

// Invalid, call is outside of class 'SpecialUser'.
SpecialUser.#generateId();

const user = new SpecialUser(42);
// And that won't work as well.
user.#stringifyId();

الكلمات الأخيرة للفصل الأخير

هذه المقالة ليست طويلة جدًا ولكنها تسلط الضوء على ميزة رائعة يقدمها Bynnsscript الآن بالإضافة إلى فائدة عامة أكثر لـ Typescript نفسها. بالنسبة لجافا سكريبت ، لا تزال الخصائص الخاصة عبارة عن مسودة (وإن كانت في مرحلة متأخرة جدًا) ، ولكن تم بالفعل تنفيذها وشحنها بالنسبة إلى "نسخة سكريبت" ، مما يوضح السرعة التي تتطور بها هذه اللغة!

الاقتراحات

ذات صلة

ملحق

اللغات