Sobes.tech
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 είναι πιο ευέλικτο.