티스토리 뷰

728x90
// keyof + generic + extends & type lookup

interface IPerson {
  name: string;
  age: number;
}

const person: IPerson = {
  name: "Hyun",
  age: 33,
};

const getProp = (obj: IPerson, key: string | number): string | number => {
  return obj[key]; // Error
};

const getProp1 = (obj: IPerson, key: keyof IPerson): IPerson[keyof IPerson] => {
  return obj[key];
};

const getProp2 = <T, K extends keyof T>(obj: T, key: K): T[K] => {
  return obj[key];
};

const setProp = (
  obj: IPerson,
  key: string | number,
  value: string | number
): void => {
  obj[key] = value; // Error
};

const setProp1 = (
  obj: IPerson,
  key: keyof IPerson,
  value: IPerson[keyof IPerson]
): void => {
  obj[key] = value; // Error
};

const setProp2 = <T, K extends keyof T>(obj: T, key: K, value: T[K]): void => {
  obj[key] = value;
};
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함