Sobes.tech
Middle

Τι είναι τα γενόσημα;

sobes.tech AI

Απάντηση από AI

Τα γενικά (generics) σε TypeScript επιτρέπουν τη δημιουργία συστατικών (συναρτήσεις, κλάσεις, διεπαφές) που μπορούν να λειτουργούν με διάφορους τύπους δεδομένων, διατηρώντας ταυτόχρονα την ασφάλεια των τύπων. Επιτρέπουν να γράφετε πιο ευέλικτο και επαναχρησιμοποιήσιμο κώδικα, χωρίς να χάνετε τα πλεονεκτήματα της στατικής τυποποίησης. Το πιο απλό παράδειγμα είναι η χρήση γενικών σε συναρτήσεις για να επιστρέφουν τον ίδιο τύπο που δόθηκε ως όρισμα.

// Συνάρτηση που δέχεται ένα όρισμα οποιουδήποτε τύπου και το επιστρέφει
function identity<T>(arg: T): T {
    return arg;
}

// Χρήση γενικού με συγκεκριμένο τύπο - string
let outputString = identity<string>("σειρά"); // Ο τύπος του outputString θα είναι string

// Χρήση γενικού με αυτόματη εξαγωγή τύπου - number
let outputNumber = identity(123); // Ο τύπος του outputNumber θα είναι number

Τα γενικά μπορούν επίσης να χρησιμοποιηθούν σε κλάσεις:

// Κλάση που εργάζεται με στοιχεία οποιουδήποτε τύπου
class GenericBox<T> {
    value: T;
    constructor(initialValue: T) {
        this.value = initialValue;
    }
}

// Δημιουργία στιγμιότυπου της GenericBox με τύπο string
let stringBox = new GenericBox<string>("γεια");
// Δημιουργία στιγμιότυπου της GenericBox με τύπο boolean
let booleanBox = new GenericBox(true); // TypeScript θα αποδώσει τον τύπο

Και σε διεπαφές:

// Διεπαφή με γενικό
interface KeyValuePair<K, V> {
    key: K;
    value: V;
}

// Χρήση της διεπαφής με συγκεκριμένους τύπους
let stringNumberPair: KeyValuePair<string, number> = { key: "ηλικία", value: 30 };

Πλεονεκτήματα της χρήσης γενικών:

  • Επαναχρησιμοποίηση κώδικα: Μια δομή μπορεί να χρησιμοποιηθεί με διαφορετικούς τύπους δεδομένων.
  • Ασφάλεια τύπων: Ο μεταγλωττιστής ελέγχει τους τύπους κατά τη διάρκεια της μεταγλώττισης, αποτρέποντας πιθανά σφάλματα.
  • Αναγνωσιμότητα και διαχειρισιμότητα: Ο κώδικας γίνεται πιο κατανοητός, καθώς φαίνεται ξεκάθαρα με ποιους τύπους εργάζεται το συστατικό.

Τα γενικά χρησιμοποιούνται συχνά σε βιβλιοθήκες και πλαίσια, όπως το React (για τον τυποποίηση των props των συστατικών), το Redux (για τον τυποποίηση του store), και κατά την εργασία με συλλογές δεδομένων.