Total Typescript - key mapping

김동하·2025년 4월 14일
0

typescript

목록 보기
15/19
post-thumbnail

1. never in key mapping

말그대로 인터페이스 OnlyIdKeys는 id 관련 키만 추출하는 타입이다. Example에서 id 관련 키만 추출해보자.

이렇게 키를 순회하는 타입의 기본적인 형태로 일단 만든다.

이제 여기서 id와 관련된 키만 추출해야한다. 가장 먼저 템플릿 리터럴을 떠올릴 수 있다.

regex 비슷하게 앞뒤로 string를 두고 id가 될 수 있는 템플릿 리터럴를 만든다.

잘 작동한다. 그럼 [K in keyof T]SearchForIdextends로 넣어줘야 한다.

이젠 되지 않았을까 생각했는데, "?"를 까먹었냐는 친절한 에러가 나온다!

extends에 SearchForId에 속할 경우, K를 아니면 never를 반환해야 한다.


(이정도로까지 해야하나 타입..?)

그럼 id 관련 키만 잘 추출될 것을 확인할 수 있다.

2. discriminated union

좋다... key로 갈 때까지 가보자...

route, search를 키로 갖는 객체를 유니언으로 정한 Route라는 타입이 있다.

유니언으로 되어 있는 Route이 타입의 value를 key로 갖는 하나의 합쳐진 타입 형태로 추출하려고 한다. 스텝 바이 스텝으로 가보자!

mapping

일단 그냥 키 맵핑을 해서 value가 key가 될 수 있도록 한다.

route만 맵핑하면

이렇게 된다. 이제 각 value는 search의 value를 가져와야 한다.

여기에 사용할 수 있는 아주 적절한 Extract라는 녀석을 사용해보자

Extract는 js 메서드로 치면 find 같은 녀석이다. 이 녀석을 제네릭으로 바꿔서 search의 밸류를 가져와보자.

아주 완벽하게 가져오는 것을 확인할 수 있다.

더 쉬운 방법

사실 as를 사용한 더 쉬운 방법이 있다.


(여기부터 살짝 머리가 안 돌아간다)

  1. [R in Route]:Route 유니온 타입의 각 객체를 순회한다.
  2. as R["route"]를 통해 각 객체의 route 값을 새 키로 사용한다.

이제 위와 동일하게 search도 해주면 된다.

아주 깔끔하게 완성이다.

참고 : total typescript

profile
프론트엔드 개발

0개의 댓글

관련 채용 정보