typescript

keyof 연산자, 타입 변환기

jdy8739 2022. 1. 19. 22:58

1)

key of는 interface나 객체 타입 alias에서

 

key값을 전부 뽑아내어 유니언타입으로 만드는 연산자이다.

 

 

예시를 보자.

Person1이라는 interface의 객체 타입의 key값들을 전부 뽑아내어

 

유니언 타입으로 만든다.

 

해당 유니언 타입 안에 각 타입은 프로퍼티 key값의 리터럴로 정해진다.

 

즉, "age" | "name" 이렇게된다.

 

 

그리고 interface가 아니고 객체 type alias도 keyof 연산이 가능하다.

 

원래 타입의 프로퍼티 key값 리터럴을 모아놓은 유니언 타입과 일치하지않으면

 

저렇게 에러가난다.

 

 

 

2)

Mapped Types 이라고 기존 타입을 복사해

 

프로퍼티의 타입만 바꾼 새로운 타입을 만들 수 있다.

 

[key in keyof T] 이게 핵심인데,

 

제네릭으로 받은 타입(T)을 keyof 연산하면

 

해당 타입의 모든 프로퍼티 key값을 리터럴로 한 유니언 타입이 만들어진다고했다.

 

그러면 해당 타입의 프로퍼티 key값들을

 

다시 하나씩 in 연산자로 keyof로 생성된 유니언 타입에 존재하는지 확인한다.

 

딱히 변수가 없다면 실행 여부는 참일것이고, 

 

여부가 참이면 : 오른쪽에 지정된 타입으로 타입을 바꿔준다.

 

 

타입 변환기는 이렇게 만들 수 있다.