Open shldhee opened 2 years ago
interface IPerson { name: string; age: number; } const person: IPerson = { name: 'Mark', age: 39, }; // type Keys = keyof IPerson; // key의 이름으로 된 문자열 'name' // const keys: Keys = "" // 'name', 'age' 값 넣을 수 있음 // string | numbere대신 keyof IPerson사용 // IPerson[keyof IPerson] => IPerson["name" | "age"] => IPerson["name"] | IPerson["age"] => string | number function getProps<T, K extends keyof T>(obj:T, key: K): T[K] { // name , age Ekr return obj[key]; } // getProps(person, 'name') // getProps(person, 'age') // const getProps<T> = (obj: T, key: keyof T): T[keyof T] => { // return obj[key]; // // key가 name일때 string이 나와야 하는데 // // string | number로 나오니 에러에러에러 삐뽀 // } // const getProps = (obj: IPerson, key: keyof IPerson): IPerson[keyof IPerson] => { // return obj[key]; // // key가 name일때 string이 나와야 하는데 // // string | number로 나오니 에러에러에러 삐뽀 // } // const setProps = (obj:IPerson, key: keyof IPerson, value: string | number): void => { // obj[key] = value; // //name이면 string, age면 number // } function setProps<T, K extends keyof T> (obj:T, key: K, value: T[K]): void { obj[key] = value; } setProps(person, "name", "Anna"); // function setProps (obj:IPerson, key: keyof IPerson, value: string | number): void { // obj[key] = value; // } // const getProps = (obj: IPerson, key: 'name' | 'age'): string | number => { // return obj[key]; // // key가 name일때 string이 나와야 하는데 // // string | number로 나오니 에러에러에러 삐뽀 // } // const setProps = (obj:IPerson, key:'name' | 'age', value: string | number): void => { // obj[key] = value; // //name이면 string, age면 number // }