الرموز في TypeScript

من موسوعة حسوب

مقدمة

أضافت النسخة ECMAScript 2015 من لغة JavaScript نوع بيانات أوليّ (primitive data type) جديد يُسمّى ‎symbol‎، وهو نوعٌ أوليّ مثل النوع ‎number‎ والنوع ‎string‎. انظر توثيق ‎Symbol‎ لتفصيل دقيق عن هذه الرموز.

تنشأ القيم من النوع ‎symbol‎ عبر استدعاء الدالة البانية ‎‎Symbol()‎‎:

let sym1 = Symbol();

let sym2 = Symbol("key"); // مفتاح نصيّ اختياريّ

الرموز فريدة (unique) وغير قابلة للتعديل (immutable):

let sym2 = Symbol("key");
let sym3 = Symbol("key");

sym2 === sym3; // false, الرموز فريدة ولو أُنشِأت بنفس المفتاح

يُمكن استخدام الرموز كمفاتيح لخاصيات الكائنات كما السلاسل النصيّة:

let sym = Symbol();

let obj = {
    [sym]: "value"
};

console.log(obj[sym]); // "value"

يُمكن كذلك مزج الرموز مع تصريحات الخاصيات المحسوبة (computed property declarations) للتصريح عن خاصيات الكائنات وعناصر الأصناف:

const getClassNameSymbol = Symbol();

class C {
    [getClassNameSymbol](){
       return "C";
    }
}

let c = new C();
let className = c[getClassNameSymbol](); // "C"

الرموز المعروفة (Well-known Symbols)

إضافة إلى الرموز التي يُعرِّفها المبرمج، هناك كذلك رموز خاصّة مسبقة التعريف تُسمّى بالرموز المعروفة. تُستخدَم هذه الرموز المضمّنة لتمثيل آلية عمل بعض أجزاء اللغة داخليًّا.

هذه قائمة رموز معروفة (انظر توثيق الرموز للاستزادة):

Symbol.hasInstance

دالة تُحدِّد ما إذا كانت الدالة البانية تتعرّف على أحد الكائنات على أنَّه كائنٌ مُنشَأٌ منها. وتُستخدَم من المعامل instanceof؛ ويمكن تخصيص سلوك المعامل instanceof باستخدام هذا الرمز.

Symbol.isConcatSpreadable

قيمة منطقية تُحدِّد ما إذا كان يجب «تسطيح» (flatten) الكائن إلى عناصر مصفوفة. ويستخدم هذا الرمز من الدالة Array.prototype.concat()‎.

Symbol.iterator

دالة تُعيد المكرّر (iterator) الافتراضي لكائن معيّن، الذي يُستخدَم من حلقة for...of.

Symbol.match

دالة تُطابَق مع سلسلة نصية، وتُستخدَم أيضًا لتحديد إذا كان بالإمكان استخدام الكائن كتعبير نمطي. وتُستخدَم من الدالة String.prototype.match()‎.

Symbol.replace

هذا الرمز المعروف يُحدِّد الدالة التي ستستبدل جزءًا من سلسلة نصية؛ وهذه الدالة ستُستدعى من الدالة String.prototype.replace()‎.

Symbol.search

هذا الرمز المعروف يُحدِّد الدالة التي ستعيد فهرسًا (index) ضمن سلسلة نصية الذي يُطابِق التعبير النمطي؛ وهذه الدالة ستُستدعى من الدالة String.prototype.search()‎.

Symbol.species

دالة تُستخدَم لإنشاء كائنات مشتقة.

Symbol.split

هذا الرمز المعروف يُحدِّد الدالة التي ستقسم سلسلة نصية في الفهارس (indexes) التي تُطابِق تعبيرًا نمطيًا؛ وهذه الدالة ستُستدعى من الدالة String.prototype.split()‎.

Symbol.toPrimitive

دالة تُستخدَم لتحويل الكائن إلى قيمة أوليّة مناسبة. تُستدعى من العملية المجرّدة ‎ToPrimitive‎.

Symbol.toStringTag

سلسلة نصية تُستخدَم في الوصف الافتراضي للكائن، ويستخدم هذا الرمز من الدالة Object.prototype.toString()‎.

Symbol.unscopables

كائن ‎Object‎ تكون أسماء خاصياته أسماء خاصياتٍ تُستبعد من بيئة ارتباطات ‎with‎ الخاصّة بالكائنات ذات العلاقة.

مصادر