[ Typescript ] - Object : keyof & Mapped Types (object 변환기)

최문길·2023년 12월 25일
0

Typescript

목록 보기
22/23

keyof 연산자


let obj = { name : 'kim', age : 30 }
Object.keys(obj) // [ 'name' , 'age' ]

위와 같이 object의 key값들을 가져오는 연산자가 있다.


keyof

keyof 연산자를 이용하면 union 타입을 만들어줌


interface Person {
  age : number
  name : string
}

keyof Person // 'age' | ' name' 이렇게 남는다. 

type PersonKeys = keyof Person // 유니온타입임
/*
PersonKeys = 'age' | 'name'
*/

let a : PersonKeys = 'name' // 가능




mapping - 타입변환기

type Car  = {
  color : boolean,
  model : boolean,
  price : boolean | number
}

// type 잘못 입력해서 string으로 만들고 싶은데...

type Car2 = {
  color : string,
  model : string,
  price : string
} // 이렇게 만들면 되겠지만....

다른 방법을 이용해보자

type Car  = {
  color : boolean,
  model : boolean,
  price : boolean | number
}

type TypeChanger<T> = {
  // T의 속성이 `key`에 있으면 string으로type지정해주세요 - 근데 당연한것 아닌가?
  [key in keyof T ] : string 
}

type NewType = TypeChanger<Car>

위와 같이 타입을 매핑 ( A -> B로 변환) 해버리면 된다 .

근데 ,
사실 쓰는 법이 정해져있다고 한다 .

[작명 in keyof 타입파라미터 ] : 원하는 타입
이렇게 입력하면 object 타입을 입력했을 때 속성명은 그대로지만 다른 타입으로 변환해주는 변환기를 만들 수있다.

in 키워드는 왼쪽이 오른쪽에 들어있냐, 들어있으면 true 없으면 false : 속성 in 객체

출저 Mdn



위의 mapping이 와닿지가 않으면 하드코딩해보면 되지..







mapping 한다란..

객체의 속성들을 순회해서 속성의 타입을 다른 타입으로 바꿔주는 역할을 한다. 라는 의미인데

객체의 속성 (key) 값을 맵핑할 때 쓰는 공식? 규칙?이 바로

[key in keyof 타입파라미터 ] 을 이용하는 것이다. 라고 일단은 생각하자.

일단은 생각하자고만 마치는 이유는 아직 공부하는 중이고 다양한 시도를 안해보았기 때문!

0개의 댓글