دالة للبحث عن عنصر بواسطة ID
جزء من قسم مقدمة إلى TypeScript في رحلة JavaScript على Coddy. الدرس 65 من 73.
التحدي
سهللقد تم تزويدك بما يلي من التحدي السابق:
- الواجهة العامة
InventoryItem<T>مع الخصائصidوquantityوdetails - الدالة العامة
addItemالتي تضيف عناصر إلى مصفوفات المخزون - عناصر مخزون متنوعة ومصفوفات مخزون محدثة
قم بإنشاء دالة عامة تسمى findItemById تبحث عن عنصر في مصفوفة مخزون بواسطة معرفه (ID).
يجب أن تقوم الدالة بما يلي:
- استخدام معامل نوع عام
T - قبول معامل
inventoryمن النوعInventoryItem<T>[] - قبول معامل
idمن النوعnumber - إرجاع العنصر الذي تم العثور عليه من النوع
InventoryItem<T>أوundefinedإذا لم يتم العثور عليه - أن يكون لها تعليق توضيحي صريح لنوع الإرجاع هو
InventoryItem<T> | undefined
قم بإنشاء مخزونات اختبارية:
- قم بإنشاء
mixedBookInventoryكمصفوفة تحتوي على:- عنصر بـ
id: 10، وquantity: 3، وdetails: { title: "JavaScript Basics", author: "Alice Brown" } - عنصر بـ
id: 11، وquantity: 7، وdetails: { title: "React Fundamentals", author: "Bob Wilson" } - عنصر بـ
id: 12، وquantity: 2، وdetails: { title: "Node.js Guide", author: "Carol Davis" }
- عنصر بـ
- قم بإنشاء
mixedElectronicInventoryكمصفوفة تحتوي على:- عنصر بـ
id: 20، وquantity: 5، وdetails: { brand: "Samsung", model: "Galaxy S23" } - عنصر بـ
id: 21، وquantity: 1، وdetails: { brand: "Apple", model: "iPhone 15" }
- عنصر بـ
اختبر دالتك واطبع المخرجات التالية:
- ابحث عن العنصر ذو المعرف 11 في
mixedBookInventoryواطبعdetails.titleللنتيجة (أوundefinedإذا لم يتم العثور عليه) - ابحث عن العنصر ذو المعرف 20 في
mixedElectronicInventoryواطبعdetails.brandللنتيجة (أوundefinedإذا لم يتم العثور عليه) - ابحث عن العنصر ذو المعرف 99 في
mixedBookInventoryواطبع النتيجة (يجب أن تكونundefined) - ابحث عن العنصر ذو المعرف 12 في
mixedBookInventoryواطبعquantityللنتيجة (أوundefinedإذا لم يتم العثور عليه) - ابحث عن العنصر ذو المعرف 21 في
mixedElectronicInventoryواطبعdetails.modelللنتيجة (أوundefinedإذا لم يتم العثور عليه) - ابحث عن العنصر ذو المعرف 10 في
mixedBookInventoryواطبعidللنتيجة (أوundefinedإذا لم يتم العثور عليه) - ابحث عن العنصر ذو المعرف 50 في
mixedElectronicInventoryواطبع النتيجة (يجب أن تكونundefined)
جرّب بنفسك
// Generic interface from previous challenge
interface InventoryItem<T> {
id: number;
quantity: number;
details: T;
}
// Items from previous challenge
const bookItem: InventoryItem<{ title: string; author: string }> = {
id: 1,
quantity: 5,
details: { title: "TypeScript Handbook", author: "John Doe" }
};
const electronicItem: InventoryItem<{ brand: string; model: string }> = {
id: 2,
quantity: 3,
details: { brand: "TechCorp", model: "X100" }
};
const clothingItem: InventoryItem<{ size: string; color: string }> = {
id: 3,
quantity: 10,
details: { size: "M", color: "Blue" }
};
// Generic function to add item to inventory
function addItem<T>(inventory: InventoryItem<T>[], newItem: InventoryItem<T>): InventoryItem<T>[] {
return [...inventory, newItem];
}
// Create book inventory and new book
const bookInventory = [bookItem];
const newBook: InventoryItem<{ title: string; author: string }> = {
id: 4,
quantity: 2,
details: { title: "Advanced TypeScript", author: "Jane Smith" }
};
const updatedBookInventory = addItem(bookInventory, newBook);
// Create electronic inventory and new electronic
const electronicInventory = [electronicItem];
const newElectronic: InventoryItem<{ brand: string; model: string }> = {
id: 5,
quantity: 1,
details: { brand: "GadgetCorp", model: "Z500" }
};
const updatedElectronicInventory = addItem(electronicInventory, newElectronic);
// Print outputs
console.log(updatedBookInventory.length);
console.log(updatedBookInventory[1].details.title);
console.log(updatedBookInventory[1].details.author);
console.log(updatedElectronicInventory.length);
console.log(updatedElectronicInventory[1].details.brand);
console.log(updatedElectronicInventory[1].details.model);
console.log(updatedElectronicInventory[0].id);
console.log(updatedElectronicInventory[1].quantity);جميع دروس مقدمة إلى TypeScript
1البداية مع TS
ما هي TypeScript؟لماذا نستخدم TypeScript؟أول كود TypeScript لكعملية الـ Compilation والأخطاءملخص: مقدمة في TS4التعامل مع الدوال
تحديد أنواع المعاملات وقيم الإرجاعتحديد أنواع Arrow Functionsنوع الإرجاع 'void'المعاملات الاختيارية باستخدام '?'القيم الافتراضية للمعاملاتتحديد أنواع Rest Parametersتعريف أنواع الدوالملخص: بناء دوال محددة الأنواع7مشروع: قائمة مهام بسيطة
مشروع: تعريف الـ Struct للمهمةدالة لإضافة مهمة10مشروع: إدارة المخزون
مشروع: عنصر مخزون عامدالة: إضافة عناصر إلى المخزون2الأنواع الأساسية
الأنواع الأساسية: str, num, booleanالنوع 'any': مخرج الهروبالنوع 'unknown'التعامل مع 'null' و 'undef'استنتاج الأنواع في التطبيق العمليتوضيحات الأنواع الصريحةمراجعة: تدريب على الأنواع الأساسية5الأنواع: الأسماء المستعارة، الاتحادات والتقاطعات
الأسماء المستعارة للأنواع الأساسية (Primitives)أنواع الاتحاد ('|')التعامل مع أنواع الاتحادالأنواع الحرفية (Literal Types)أنواع التقاطع ('&')دمج الأسماء المستعارة للأنواعملخص: تركيبات الأنواع المتقدمة3هياكل البيانات: المصفوفات و Tuple
المصفوفات محددة النوع (Typed Arrays)معدل 'readonly' للمصفوفاتما هو الـ Tuple؟تعريف والوصول إلى الـ Tuplesتفكيك الـ Tuples (Destructuring)الـ Tuples للقراءة فقط (Readonly)المصفوفات محددة النوع متعددة الأبعاداستخدام Spread Operator مع المصفوفاتملخص: المصفوفات و Tuples6تحديد أنواع الكائنات والواجهات
توصيف أنواع الكائنات المضمنة (Inline)الأسماء المستعارة للأنواع (Type Aliases) للكائناتمقدمة عن الواجهات (Interfaces)الواجهات (Interfaces) مقابل الأسماء المستعارة للأنواع (Type Aliases)الخصائص الاختيارية وخصائص القراءة فقط (Readonly)توسيع الواجهات والأنواعإضافة الدوال (Methods) إلى الواجهاتملخص: تحديد هياكل الكائناتتدرّب بنفسك: Playground لـ TypeScript