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
יכול להיות מחרוזת
או מספר
, אבל לא בוליאני
.
שימוש בסוגי איחוד בפונקציות
סוגי איגוד שימושיים במיוחד בפונקציות שבהן פרמטרים או סוגי החזרה יכולים להיות סוגים מרובים:
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
ו- מאפייני עובד ID
.
שימוש בסוגי צומת בפונקציות
ניתן להשתמש בסוגי צומתים גם בפונקציות המחייבות מספר מאפייני סוג:
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
ו-Retangle
, והפונקציה getArea
מטפלת בשני הסוגים בהתאם.
מַסְקָנָה
סוגי איחוד וצומתים ב-TypeScript מספקים דרכים רבות עוצמה לניהול ולשילוב של סוגים, ומציעים גמישות ודיוק בהגדרות סוגים. סוגי איגוד מאפשרים למשתנה להיות אחד מכמה סוגים, בעוד שסוגי צומת משלבים מספר סוגים לאחד. על ידי שימוש בתכונות אלו, תוכל ליצור יישומים חזקים ובטוחים יותר.
תרגל שימוש בסוגי איחוד וצומתים כדי להרגיש בנוח עם היכולות שלהם ולשפר את כישורי הקידוד שלך ב-TypeScript.