Sobes.tech
Middle+

type Obj = { nom: string âge: number } const getObjField = (obj: any, key: any) => { return obj[key] } const user: Obj = { nom: "Nik", âge: 25 } const value1 = getObjField(user, "nom") const value2 = getObjField(user, "âge") const value3 = getObjField(user, "test") const getObjField = <T, K extends keyof T>(obj: T, key: K) => { return obj[key] }

sobes.tech IA

Réponse de l'IA

Dans la première version de la fonction getObjField, les paramètres ont un type any, ce qui ne permet pas de vérifier les types et peut entraîner des erreurs, par exemple lors de l'accès à une clé inexistante.

Dans la deuxième version, un générique avec la contrainte K extends keyof T est utilisé, ce qui garantit que la clé key existe réellement dans l'objet obj. Cela augmente la sécurité et la facilité d'utilisation de la fonction.

Exemple:

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"); // type string
const value2 = getObjField(user, "age");  // type number
// const value3 = getObjField(user, "test"); // Erreur de compilation, la clé "test" n'existe pas dans Obj

Ainsi, la deuxième version de la fonction assure la sécurité de type et empêche les erreurs lors de la compilation.