جاري التحميل...
جاري التحميل...
كتابة دوال آمنة مع TypeScript
في TypeScript، يمكنك كتابة المعاملات وقيمة الإرجاع للدوال:
function add(a: number, b: number): number {
return a + b;
}
const result = add(5, 3); // 8يمكن أن يكون لدى الدوال معاملات اختيارية وقيم افتراضية:
function greet(name: string, greeting: string = 'Hello'): string {
return `${greeting}, ${name}!`;
}
greet('Ahmed'); // 'Hello, Ahmed!'
greet('Salaam', 'Salaam'); // 'Salaam, Salaam!'تدعم الدوال السهمية أيضاً تعليقات الأنواع:
const multiply = (a: number, b: number): number => a * b;
const double = (x: number): number => x * 2;يسمح إحلال الدوال للدالة بقبول أنواع مختلفة من المعاملات:
function format(value: string): string;
function format(value: number): string;
function format(value: string | number): string {
if (typeof value === 'string') return value;
return value.toFixed(2);
}تُمكّنك العامة من كتابة دوال تعمل مع أي نوع مع الحفاظ على أمان النوع:
function identity<T>(arg: T): T {
return arg;
}
const num = identity<number>(42); // 42
const str = identity<string>('hello'); // 'hello'💡 لماذا العامة؟:
تُمكّنك العامة من كتابة دوال قابلة لإعادة الاستخدام دون فقدان معلومات النوع. يُحدد النوع عند استدعاء الدالة.
يساعد حارس النوع على تضييق الأنواع داخل الكتل الشرطية:
function process(value: string | number) {
if (typeof value === 'string') {
return value.toUpperCase();
}
return value.toFixed(2);
}كيف تكتب نوعاً لمعامل الدالة؟
ما هي فائدة العامة؟
كيف تُحدّد قيمة معامل افتراضية؟
أنشئ دوال أداة عامة: identity، first، last، zip. اختبرها بأنواع مختلفة للتحقق من أمان النوع.
الحل:
// Generic utility functions
function identity<T>(arg: T): T {
return arg;
}
function first<T>(arr: T[]): T | undefined {
return arr[0];
}
function last<T>(arr: T[]): T | undefined {
return arr[arr.length - 1];
}
function zip<A, B>(a: A[], b: B[]): [A, B][] {
return a.map((item, i) => [item, b[i]]);
}
// Test with different types
const num = identity<number>(42);
const str = identity<string>('hello');
const firstNum = first([1, 2, 3]);
const pairs = zip(['a', 'b'], [1, 2]);صيغة الدالة:
العامة والحراس:
كيف نُعرّف أنواع المعاملات والإرجاع في الدوال؟
الإجابة:
function name(param: type): returnType { }
ما هي Function Overloading؟
الإجابة:
تعريف عدة توقيعات لدالة واحدة باستخدام parameter types مختلفة.
ما هي Generics؟
الإجابة:
نوع مُعامل (type parameter) يسمح بإنشاء مكونات/دوال قابلة لإعادة الاستخدام بأنواع مختلفة.
متى نستخدم Generic؟
الإجابة:
عندما تريد دالة أو مكون يعمل مع أي نوع بشكل آمن.
استخدم optional parameters
أضف ? قبل النقطتين: param?: type
استخدم constraints
<T extends { id: number }> لتحديد الأنواع المسموح بها