Έχετε χρησιμοποιήσει διακριτικές ενώσεις και type guards; Ποια ενσωματωμένα type guards γνωρίζετε;
sobes.tech AI
Απάντηση από AI
Οι διακριτές ενώσεις (discriminated unions) και οι έλεγχοι τύπου (type guards) είναι ισχυρά εργαλεία του TypeScript για την εργασία με ενώσεις τύπων, επιτρέποντας τον ασφαλή προσδιορισμό ενός συγκεκριμένου τύπου μέσα στην ένωση.
Διακριτές ενώσεις είναι ενώσεις τύπων όπου κάθε τύπος έχει ένα κοινό λεκτικό κλειδί (π.χ., το πεδίο type), μέσω του οποίου μπορεί να προσδιοριστεί με μοναδικό τρόπο ένας συγκεκριμένος τύπος.
Έλεγχοι τύπου (type guards) είναι συναρτήσεις ή κατασκευές που ελέγχουν τον τύπο μιας μεταβλητής κατά την εκτέλεση και περιορίζουν τον τύπο για τον μεταγλωττιστή.
Οι ενσωματωμένοι έλεγχοι τύπου στο TypeScript:
typeof— για πρωταρχικούς τύπους (string,number,boolean)instanceof— για τον έλεγχο αν ανήκει σε μια κλάσηin— για τον έλεγχο αν υπάρχει μια ιδιότητα σε ένα αντικείμενο
Παράδειγμα διακριτής ένωσης και ελέγχου τύπου:
interface Τετράγωνο {
kind: 'square';
size: number;
}
interface Κύκλος {
kind: 'circle';
radius: number;
}
type Σχήμα = Τετράγωνο | Κύκλος;
function εμβαδόν(σχήμα: Σχήμα): number {
switch (σχήμα.kind) {
case 'square':
return σχήμα.size * σχήμα.size;
case 'circle':
return Math.PI * σχήμα.radius ** 2;
}
}
Εδώ, το kind είναι ο διακριτικός παράγοντας, και το switch λειτουργεί ως έλεγχος τύπου.
Χρήση των ενσωματωμένων ελέγχων τύπου:
function είναιString(αξία: unknown): αξία είναι string {
return typeof αξία === 'string';
}
if (είναιString(κάτι)) {
// εδώ, το `κάτι` είναι τύπου string
}