Middle+
τύπος Obiekt = { όνομα: string ηλικία: number } const getObjField = (obj: any, key: any) => { return obj[key] } const user: Obiekt = { όνομα: "Nik", ηλικία: 25 } const value1 = getObjField(user, "όνομα") const value2 = getObjField(user, "ηλικία") const value3 = getObjField(user, "test") const getObjField = <T, K extends keyof T>(obj: T, key: K) => { return obj[key] }
sobes.tech AI
Απάντηση από AI
Στην πρώτη έκδοση της συνάρτησης getObjField, οι παράμετροι έχουν τύπο any, που δεν επιτρέπει τον έλεγχο τύπων και μπορεί να οδηγήσει σε σφάλματα, για παράδειγμα, κατά την πρόσβαση σε ένα μη υπάρχον κλειδί.
Στη δεύτερη έκδοση, χρησιμοποιείται ένας γενικός τύπος με τον περιορισμό K extends keyof T, που διασφαλίζει ότι το κλειδί key υπάρχει πραγματικά στο αντικείμενο obj. Αυτό αυξάνει την ασφάλεια και την ευκολία χρήσης της συνάρτησης.
Παράδειγμα:
type Obj = {
name: string;
age: number;
};
const getObjField = <T, K extends keyof T>(obj: T, key: K): T[K] => {
return obj[key];
};
const user: Obj = { name: "Nik", age: 25 };
const value1 = getObjField(user, "name"); // τύπος: string
const value2 = getObjField(user, "age"); // τύπος: number
// const value3 = getObjField(user, "test"); // Σφάλμα μεταγλώττισης, το κλειδί "test" δεν υπάρχει στο Obj
Έτσι, η δεύτερη έκδοση της συνάρτησης διασφαλίζει την ασφάλεια τύπων και αποτρέπει σφάλματα κατά τη μεταγλώττιση.