0Pricing
TypeScript Academy · درس

رموز الخدمات الآمنة نوعيًا

استخدموا رموزًا محددة الأنواع لتجنب أخطاء الحل أثناء التشغيل

رموز الخدمات الآمنة نوعيًا درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

مشكلة الرموز النصية

من السهل أن تكتب الرموز النصية مثل "Logger" بشكل خاطئ، كما أنها لا تحمل أي معلومات عن النوع. لا يستطيع الحاوي إخبارك بأن get("Loggr") خاطئة، وغالبًا ما يكون النوع الناتج any.

الرموز كرموز مميزة

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

const TYPES = {
  Logger: Symbol.for("Logger"),
  Mailer: Symbol.for("Mailer"),
} as const;

ربط الرموز بالأنواع

الهدف الأعمق هو ربط كل رمز بـالنوع الذي يحله، بحيث يعيد الحاوي النوع الصحيح بدلًا من any. لذلك ننشئ غلافًا مقيّدًا بالنوع للرمز.

interface Token<T> {
  readonly id: symbol;
  readonly _type?: T; // phantom type marker
}

إنشاء رموز مقيّدة بالأنواع

ينشئ مساعدٌ رمزًا يحتفظ بنوعه في حقل وهمي. لا يحمل هذا الحقل قيمةً أبدًا؛ بل ينقل معلومات النوع إلى المصرّف فقط.

function token<T>(name: string): Token<T> {
  return { id: Symbol.for(name) };
}
const LoggerToken = token<Logger>("Logger");

واجهة حاوي مقيّدة بالأنواع

نقيّد نوع الحاوي بحيث يستنتج get النوع الناتج من الرمز. لا عمليات تحويل، ولا any.

interface TypedContainer {
  get<T>(t: Token<T>): T;
  bind<T>(t: Token<T>, impl: () => T): void;
}

الربط باستخدام الأنواع المستنتجة

عند إجراء الربط، يجب أن يطابق نوع القيمة التي يعيدها المصنع نوع الرمز. وتُكتشف حالات عدم التطابق أثناء التصريف.

declare const c: TypedContainer;
c.bind(LoggerToken, () => new ConsoleLogger());
// ConsoleLogger must satisfy Logger or this errors.

الحل باستخدام الأنواع الكاملة

أصبح get الآن يعيد نوع الرمز نفسه بدقة. ويعمل الإكمال التلقائي والتحقق من الأنواع على الناتج من دون تعليق يدوي للنوع.

const logger = c.get(LoggerToken); // type: Logger
logger.log("typed resolution");

تجنب أخطاء البحث

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

// c.get(LogerToken) -> compile error: LogerToken is not defined

المكافئ في InversifyJS

يدعم Inversify الرموز المميزة أيضًا، وتضيف مساعدات المجتمع أغلفة مقيّدة بالأنواع. والمبدأ متطابق: اربط رمزًا مقيّدًا بالنوع بتنفيذ، ثم حله باستخدام النوع الصحيح.

import { Container } from "inversify";
const TYPES = { Logger: Symbol.for("Logger") };
// container.bind<Logger>(TYPES.Logger).to(ConsoleLogger)

سجل الرموز

يمنح تجميع الرموز في وحدة واحدة مصدرًا موحدًا للحقيقة، مما يسهل العثور عليها وإعادة هيكلتها والحفاظ على اتساقها في قاعدة الشيفرة.

export const TOKENS = {
  Logger: token<Logger>("Logger"),
  Mailer: token<Mailer>("Mailer"),
};

ملخص الفوائد

توفر الرموز المقيّدة بالأنواع هويةً فريدةً (الرموز)، وأمانًا أثناء التصريف (رفض حالات عدم التطابق)، وأنواعًا صحيحة للنواتج (من دون any)، وحمايةً من الأخطاء المطبعية (أخطاء المتغيرات غير المعرّفة).

تحقق سريع

تحقق سريع من هذا الدرس.

مراجعة

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

الأسئلة الشائعة

هل درس «رموز الخدمات الآمنة نوعيًا» مجاني؟

نعم — نص درس «رموز الخدمات الآمنة نوعيًا» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 4 دروس في المجموع.

ماذا ستتعلم في «رموز الخدمات الآمنة نوعيًا»؟

استخدموا رموزًا محددة الأنواع لتجنب أخطاء الحل أثناء التشغيل تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟

لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «رموز الخدمات الآمنة نوعيًا»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟

نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات عكس التحكم
  2. الحقن عبر المُنشئ
  3. حاويات DI باستخدام InversifyJS
  4. رموز الخدمات الآمنة نوعيًا
← العودة إلى TypeScript Academy