Middle
Πότε πρέπει να χρησιμοποιείτε τύπους και πότε interfaces σε TypeScript;
sobes.tech AI
Απάντηση από AI
Τύποι (type) πρέπει να χρησιμοποιούνται για:
- Ενώσεις (unions) και διασταυρώσεις (intersections):
type Status = "pending" | "completed" | "failed"; type UserWithAddress = User & Address; - Πρωταρχικοί τύποι και literals:
type ID = string | number; type Direction = "up" | "down" | "left" | "right"; - Τυχαία (tuples):
type RgbColor = [number, number, number]; - Δημιουργία alias για υπάρχοντες τύπους:
type StringOrNumber = string | number; - Ορισμός συνθηκών τύπων (conditional types):
type TypeOfProp<T, K extends keyof T> = T[K];
Οι διεπαφές (interface) πρέπει να χρησιμοποιούνται για:
- Περιγραφή της δομής αντικειμένων:
interface User { id: number; name: string; age?: number; // Προαιρετική ιδιότητα } - Εφαρμογή μέσω κλάσεων (implements):
interface Logger { log(message: string): void; } class ConsoleLogger implements Logger { log(message: string) { console.log(message); } } - Επέκταση άλλων διεπαφών (extends):
interface Person { name: string; } interface Employee extends Person { employeeId: number; } - Δηλωτική συγχώνευση (declaration merging): Αυτό επιτρέπει την επέκταση μιας υπάρχουσας διεπαφής, δηλώνοντάς την ξανά. Με τους τύπους, αυτό δεν είναι δυνατό.
interface Box { width: number; } interface Box { // Αυτό θα προσθέσει την ιδιότητα height στη διεπαφή Box height: number; }
Σύντομη σύγκριση:
| Χαρακτηριστικό | type |
interface |
|---|---|---|
| Ενώσεις (unions) | Ναι | Όχι |
| Διασταυρώσεις (intersections) | Ναι | Όχι |
| Πρωταρχικοί τύποι και literals | Ναι | Όχι |
| Τυχαία (tuples) | Ναι | Όχι |
| Alias τύπων | Ναι | Όχι |
| Συνθήκες τύπων | Ναι | Όχι |
| Περιγραφή αντικειμένων | Ναι | Ναι |
| Υλοποίηση με κλάσεις | Όχι | Ναι |
| Επέκταση | Ναι (με &) |
Ναι (με extends) |
| Δηλωτική συγχώνευση | Όχι | Ναι |
Γενικά, για την περιγραφή της δομής των αντικειμένων, προτιμάται η χρήση του interface, καθώς ταιριάζει καλύτερα στην αντικειμενοστραφή προσέγγιση και υποστηρίζει τη δηλωτική συγχώνευση. Για όλα τα άλλα, ειδικά για συνδυασμούς και δημιουργία νέων τύπων από υπάρχοντες, το type είναι πιο ευέλικτο.