Sobes.tech
Middle+

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

sobes.tech yapay zeka

AI'dan gelen yanıt

İlk sürümde getObjField fonksiyonunun parametreleri any türündedir, bu da tür kontrollerine izin vermez ve örneğin, var olmayan bir anahtara erişimde hatalara yol açabilir.

İkinci sürümde, K extends keyof T sınırlamasıyla bir jenerik kullanılır, bu da key anahtarının gerçekten obj nesnesinde var olduğunu garanti eder. Bu, fonksiyonun güvenliğini ve kullanım kolaylığını artırır.

Örnek:

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"); // tür: string
const value2 = getObjField(user, "age");  // tür: number
// const value3 = getObjField(user, "test"); // Derleme hatası, "test" anahtarı Obj içinde yok

Bu şekilde, fonksiyonun ikinci sürümü tür güvenliğini sağlar ve derleme aşamasında hataları önler.