generic-2 keyof, extends

홍인열·2021년 8월 12일
0
//keyof & type lookup system

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

const person: IPerson = {
  name: "Hinyc",
  age: 31,
};

type Keys = keyof IPerson;

//-----
// function getProp(obj: IPerson, key: "name" | "age"): string | number {
//   return obj[key];
// }
// IPerson[keyof IPerson]
// => IPerson["name" | "age"]
// => IPerson["name"] | IPerson["age"]
// => string | number

// function getProp(obj: IPerson, key: keyof IPerson): IPerson[keyof IPerson] {
//   return obj[key];
// }
//상기 함수에 generic을 적용
function getProp<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key];
}

getProp(person, "name");

// person['name']
// function getProp<IPerson, "name">(obj: IPerson, key: "name"): string

function setProp<T, K extends keyof T>(obj: T, key: K, value: T[K]): void {
  obj[key] = value;
}

setProp(person, "name", "Hong");
// person["name"] = "Hong"
profile
함께 일하고싶은 개발자

0개의 댓글