objet deepdive

YOUNGJOO-YOON·2021년 11월 16일
0

typeScript

목록 보기
39/65
type Value = { name: string }
const getValue = (value: Value) => {
    return value.name
}
[출처] Typescript : object > key > value 타입|작성자 ondaa

type Value = {[k: string]: string}
const getValue = (value: Value) => {
    return value.name
}
[출처] Typescript : object > key > value 타입|작성자 ondaa

type Keys = "name" | "title" | "content"
type Value = {[k in Keys]: string}
const getValue = (value: Value) => {
    return value.name // name, title, content 가 될 수가 있다.
}
[출처] Typescript : object > key > value 타입|작성자 ondaa

const getValue = <T>(value: T) => {
    return value.name
}

type Value = { name: string }
getValue<Value>({name: 'Chris'})
[출처] Typescript : object > key > value 타입|작성자 ondaa
  
  const getValue = <T>(value: T) => {
    return value.name
}


type Value = { name: string }
getValue<Value>({name: 'Chris'})
[출처] Typescript : object > key > value 타입|작성자 ondaa



const getValue = <T, K extends keyof T>(values: Array<T>, key: K): Array<> => {
    return values.map((item) => item[key])
}

type Value = { name: string; title: string }

const value: Value = [
    { name: 'Chris', title: 'Title 1' },
    { name: 'Mark', title: 'Title 2' }
]

getValue<Value, "name">(value, "name")
[출처] Typescript : object > key > value 타입|작성자 ondaa

https://icerabbit.tistory.com/94

interface Person {
    name: string
    age: number
}

type Test = keyof Person // ("name", "age")

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

function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
    return obj[key]
}

setProperty(person, 'name', 'Anna')
위의 Person interfacekeyof를 가져오면 'name''age'가 나온다. setProperty는 Person의 멤버 프로퍼티를 set하는 역할이므로, Person의 멤버를 넣어야 한다. 그러므로 Generic에 keyof를 통한 제한을 주는 것이다.

Generic과는 별개이지만, enum과 같이 keyof 키워드를 활용할 수도 있다.

const SUBJECT = {
    Math : 'Math',
    English : 'English',
} as const;
type SUBJECT = typeof SUBJECT[keyof typeof SUBJECT]; // 'Math' | 'English'
profile
이 블로그의 글은 제 생각을 정리한 글과 인터넷 어딘가에서 배운 것을 정리한 글입니다. 출처는 되도록 남기도록 하겠습니다. 수정 및 건의 오류 등이 있으면 언제든지 댓글 부탁드립니다.

0개의 댓글