"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > فهم الكلمة الأساسية المستنتجة في TypeScript

فهم الكلمة الأساسية المستنتجة في TypeScript

تم النشر بتاريخ 2024-11-03
تصفح:766

Understanding the infer Keyword in TypeScript

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

الكلمة الرئيسية الاستدلال

تم تقديم الكلمة الأساسية infer في TypeScript 2.8 ضمن الأنواع الشرطية لإنشاء متغيرات نوع مؤقتة. يمكن بعد ذلك استخدام متغيرات النوع هذه لاستنتاج الأنواع داخل فرع صحيح أو خطأ من النوع الشرطي. تتيح الكلمة الأساسية الاستدلال للمطورين كتابة أنواع أكثر ديناميكية وتعبيرية، حيث تسمح لـ TypeScript بتحديد نوع معين بناءً على السياق الذي يتم استخدامه فيه.

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

type MyConditionalType = T extends SomeType ? TrueType : FalseType;

في هذا المثال، T عبارة عن معلمة نوع عامة، ويمثل SomeType النوع الذي تتم مقارنة T به. إذا كان T يمتد إلى SomeType، فسيكون نوع MyConditionalType هو TrueType. إذا لم يكن الأمر كذلك، فسيكون FalseType.

الآن، دعنا نقدم الكلمة الأساسية للاستدلال في المزيج:

type MyInferredType = T extends SomeType ? U : FalseType;

هنا، نستخدم الكلمة الأساسية infer لإنشاء متغير نوع مؤقت U ضمن الفرع الحقيقي للنوع الشرطي. إذا قام T بتوسيع SomeType، فسيحاول TypeScript استنتاج نوع U استنادًا إلى نوع T.

أمثلة

نوع الإرجاع

ReturnType هو نوع أداة مساعدة يستخرج نوع الإرجاع للدالة. إنه مثال مثالي لكيفية استخدام الكلمة الأساسية للاستدلال لإنشاء أنواع ديناميكية. فيما يلي تعريف ReturnType:

type ReturnType any> = T extends (...args: any[]) => infer R ? R : any;

في هذا التعريف، T هو نوع دالة يأخذ أي عدد من الوسائط ويعيد أي نوع. باستخدام الكلمة الأساسية infer، نقوم بإنشاء متغير نوع مؤقت R لتمثيل نوع الإرجاع للدالة. إذا كانت T دالة، فإن TypeScript يستنتج نوع الإرجاع ويعينه إلى R.

دعونا نرى ReturnType في العمل:

function greet(name: string): string {
  return `Hello, ${name}!`;
}
​
type GreetReturnType = ReturnType; // GreetReturnType is inferred as 'string'

هنا، يتم استخدام ReturnType لاستنتاج نوع الإرجاع لوظيفة الترحيب، وهو سلسلة.

حدود

هناك نوع آخر مفيد من الأدوات المساعدة التي تستفيد من الكلمة الأساسية للاستدلال وهو المعلمات. يستخرج هذا النوع أنواع معلمات الدالة على شكل صف. تعريف المعلمات كما يلي:

type Parameters any> = T extends (...args: infer P) => any ? P : never;

في هذا المثال، قمنا بإنشاء متغير نوع مؤقت P لتمثيل أنواع معلمات الوظيفة. إذا كانت T دالة، فإن TypeScript يستنتج أنواع المعلمات ويعينها إلى P كصف.

دعونا نلقي نظرة على مثال باستخدام المعلمات:

function add(a: number, b: number): number {
  return a   b;
}
​
type AddParameters = Parameters; // AddParameters is inferred as [number, number]

هنا، يتم استخدام المعلمات لاستنتاج أنواع المعلمات لوظيفة الإضافة، وهي صف [رقم، رقم].

نوع الوعد

يمكن استخدام نوع الأداة المساعدة PromiseType لاستخراج النوع الذي يحل الوعد له. وهذا مفيد بشكل خاص عند التعامل مع الوظائف غير المتزامنة. إليك تعريف PromiseType:

type PromiseType> = T extends Promise ? U : never;

في هذا المثال، قمنا بإنشاء متغير نوع مؤقت U لتمثيل النوع الذي يتجه إليه الوعد. إذا كانت T عبارة عن وعد، فإن TypeScript يستنتج النوع الذي تم حله ويعينه لـ U. إليك مثال:

async function fetchData(): Promise {
  return "Fetched data";
}
​
type FetchedDataType = PromiseType>; // FetchedDataType is inferred as 'string'

في هذه الحالة، يتم استخدام PromiseType لاستنتاج النوع الذي يحل له وعد وظيفة fetchData، وهو سلسلة.

فتح الصفيف

يمكن استخدام نوع الأداة المساعدة UnboxArray لاستخراج نوع العناصر الموجودة داخل المصفوفة. إليك تعريف UnboxArray:

type UnboxArray> = T extends Array ? U : never;

في هذا المثال، قمنا بإنشاء متغير نوع مؤقت U لتمثيل نوع العناصر داخل المصفوفة. إذا كان T عبارة عن مصفوفة، فإن TypeScript يستنتج نوع العنصر ويعينه لـ U. على سبيل المثال:

type MyArray = number[];

type ElementType = UnboxArray; // ElementType is inferred as 'number'

هنا، يتم استخدام UnboxArray لاستنتاج نوع العناصر داخل نوع MyArray، وهو رقم.

القيود

على الرغم من أن الكلمة الرئيسية للاستدلال قوية بشكل لا يصدق، إلا أن لها بعض القيود:

  1. لا يمكن استخدامه إلا ضمن الأنواع الشرطية.

  2. ليس من الممكن دائمًا لـ TypeScript استنتاج النوع الصحيح، خاصة عند التعامل مع الأنواع المعقدة أو العودية. في مثل هذه الحالات، قد يحتاج المطورون إلى تقديم تعليقات توضيحية إضافية للنوع أو إعادة تصميم أنواعهم لمساعدة TypeScript في استنتاج النوع الصحيح.

خاتمة

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

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

بيان الافراج تم نشر هذه المقالة على: https://dev.to/zacharylee/understanding-the-infer-keyword-in-typescript-20mg?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3