الرموز في 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
الخاصّة بالكائنات ذات العلاقة.