Sobes.tech
Middle+

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

sobes.tech KI

Antwort von AI

In der ersten Version der Funktion getObjField haben die Parameter den Typ any, was keine Typüberprüfung zulässt und zu Fehlern führen kann, zum Beispiel beim Zugriff auf einen nicht vorhandenen Schlüssel.

In der zweiten Version wird ein generischer Typ mit der Einschränkung K extends keyof T verwendet, was garantiert, dass der Schlüssel key tatsächlich im Objekt obj existiert. Dies erhöht die Sicherheit und den Komfort bei der Verwendung der Funktion.

Beispiel:

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"); // Typ: string
const value2 = getObjField(user, "age");  // Typ: number
// const value3 = getObjField(user, "test"); // Kompilierungsfehler, Schlüssel "test" existiert nicht in Obj

Auf diese Weise gewährleistet die zweite Version der Funktion die Typsicherheit und verhindert Fehler während der Kompilierung.