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.