Και τα δύο περιγράφουν το σχήμα δεδομένων και είναι συχνά ανταλλάξιμα, αλλά έχουν διαφορετικές δυνατότητες.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
Και τα δύο περιγράφουν το σχήμα δεδομένων και είναι συχνά ανταλλάξιμα, αλλά έχουν διαφορετικές δυνατότητες.
interface User { name: string; age: number; }
type User2 = { name: string; age: number; };
typeinterfacetype ID = string | number; // unions
type Pair = [number, number]; // tuples
type Name = User["name"]; // indexed/mapped/conditional types
type Nullable<T> = T | null; // wrap any type
type είναι ένα γενικό alias για οποιονδήποτε τύπο — primitives, unions, tuples, mapped types. interface περιγράφει μόνο σχήματα αντικειμένων/συναρτήσεων.
interface που δεν μπορεί το typeinterface Box { width: number; }
interface Box { height: number; } // declaration merging — both merge into one
// Box now has width AND height
Τα Interfaces υποστηρίζουν declaration merging (πολλαπλές δηλώσεις συνδυάζονται) και είναι ο ιδιωματικός τρόπος επέκτασης/αύξησης, συμπεριλαμβανομένης της αύξησης τύπων βιβλιοθηκών τρίτων.
interface Admin extends User { role: string; } // interface
type Admin2 = User & { role: string }; // type uses intersection
Μια κοινή σύμβαση: χρησιμοποιήστε interface για σχήματα αντικειμένων και δημόσια APIs (καλύτερα μηνύματα σφάλματος, επεκτάσιμο, συγχωνεύσιμο) και type όταν χρειάζεστε unions, tuples ή άλλες λειτουργίες τύπων. Επιλέξτε ένα ως προεπιλογή για συνέπεια — πολλές ομάδες θέτουν ως προεπιλογή το interface για αντικείμενα και καταφεύγουν στο type μόνο όταν χρειάζεται η επιπλέον δύναμή του.