أنواع الاتحاد والتقاطع في TypeScript
توفر TypeScript ميزات قوية لنظام النوع تساعدك على كتابة كود أكثر أمانًا وقابلية للتنبؤ. ومن بين هذه الميزات أنواع الاتحاد والتقاطع، والتي توفر المرونة في تعريف وإدارة الأنواع المعقدة. تقدم هذه المقالة هذه المفاهيم وتقدم أمثلة لتوضيح استخدامها.
ما هي أنواع الاتحاد؟
تسمح أنواع الاتحاد للمتغيرات بحمل قيم من أنواع مختلفة. وهذا مفيد عندما تحتاج إلى تمثيل قيمة يمكن أن تكون أحد أنواع متعددة. يتم الإشارة إلى أنواع الاتحاد باستخدام الرمز |
(الأنبوب).
تعريف أنواع الاتحاد
لتحديد نوع الاتحاد، قم بتحديد أنواع متعددة مفصولة بالرمز |
:
let value: string | number;
value = "Hello, TypeScript"; // Valid
value = 42; // Valid
value = true; // Error: Type 'boolean' is not assignable to type 'string | number'
في هذا المثال، يمكن أن يكون المتغير value
إما string
أو number
، ولكن ليس boolean
.
استخدام أنواع الاتحاد في الوظائف
تُعد أنواع الاتحاد مفيدة بشكل خاص في الوظائف حيث يمكن أن تكون المعلمات أو أنواع الإرجاع أنواعًا متعددة:
function formatValue(value: string | number): string {
if (typeof value === "string") {
return value.toUpperCase();
} else {
return value.toFixed(2);
}
}
console.log(formatValue("hello")); // Output: HELLO
console.log(formatValue(123.456)); // Output: 123.46
تأخذ الدالة formatValue
معلمة يمكن أن تكون string
أو number
وتنسيقها وفقًا لذلك.
ما هي أنواع التقاطعات؟
تتيح لك أنواع التقاطع الجمع بين أنواع متعددة في نوع واحد. وهذا يعني أن قيمة نوع التقاطع ستلبي جميع الأنواع في التقاطع. يتم الإشارة إلى أنواع التقاطع باستخدام الرمز &
(علامة الجمع).
تحديد أنواع التقاطعات
لتحديد نوع التقاطع، قم بتحديد أنواع متعددة مفصولة بالرمز &
:
interface Person {
name: string;
}
interface Employee {
employeeId: number;
}
type EmployeePerson = Person & Employee;
const john: EmployeePerson = {
name: "John Doe",
employeeId: 1234
};
console.log(john.name); // Output: John Doe
console.log(john.employeeId); // Output: 1234
في هذا المثال، يجمع النوع EmployeePerson
بين واجهتي Person
وEmployee
، مما يؤدي إلى نوع يحتوي على الخاصيتين name
وemployeeId
.
استخدام أنواع التقاطع في الدوال
يمكن أيضًا استخدام أنواع التقاطع في الوظائف لتتطلب خصائص نوع متعددة:
function printEmployeeDetails(employee: Person & Employee): void {
console.log(`Name: ${employee.name}`);
console.log(`Employee ID: ${employee.employeeId}`);
}
const jane: EmployeePerson = {
name: "Jane Smith",
employeeId: 5678
};
printEmployeeDetails(jane);
// Output:
// Name: Jane Smith
// Employee ID: 5678
تتطلب وظيفة printEmployeeDetails
وسيطة تلبي كلا النوعين Person
وEmployee
.
الجمع بين أنواع الاتحاد والتقاطع
يمكنك الجمع بين أنواع الاتحاد والتقاطع لإنشاء تعريفات أنواع معقدة:
type Shape = Circle | Rectangle;
interface Circle {
kind: "circle";
radius: number;
}
interface Rectangle {
kind: "rectangle";
width: number;
height: number;
}
function getArea(shape: Shape): number {
if (shape.kind === "circle") {
return Math.PI * shape.radius * shape.radius;
} else {
return shape.width * shape.height;
}
}
const myCircle: Circle = { kind: "circle", radius: 10 };
const myRectangle: Rectangle = { kind: "rectangle", width: 20, height: 30 };
console.log(getArea(myCircle)); // Output: 314.159...
console.log(getArea(myRectangle)); // Output: 600
في هذا المثال، يكون النوع Shape
عبارة عن اتحاد بين Circle
وRectangle
، وتتعامل الدالة getArea
مع كلا النوعين وفقًا لذلك.
خاتمة
توفر أنواع الاتحاد والتقاطع في TypeScript طرقًا فعّالة لإدارة الأنواع ودمجها، مما يوفر المرونة والدقة في تعريفات الأنواع. تسمح أنواع الاتحاد للمتغير بأن يكون أحد عدة أنواع، بينما تجمع أنواع التقاطع بين أنواع متعددة في نوع واحد. باستخدام هذه الميزات، يمكنك إنشاء تطبيقات أكثر قوة وأمانًا للأنواع.
تدرب على استخدام أنواع الاتحاد والتقاطع لتعتاد على قدراتها وتحسين مهاراتك في برمجة TypeScript.