

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

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

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

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

잘 작동한다. 그럼 [K in keyof T]에 SearchForId를 extends로 넣어줘야 한다.

이젠 되지 않았을까 생각했는데, "?"를 까먹었냐는 친절한 에러가 나온다!
extends에 SearchForId에 속할 경우, K를 아니면 never를 반환해야 한다.

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

그럼 id 관련 키만 잘 추출될 것을 확인할 수 있다.
좋다... key로 갈 때까지 가보자...

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

유니언으로 되어 있는 Route이 타입의 value를 key로 갖는 하나의 합쳐진 타입 형태로 추출하려고 한다. 스텝 바이 스텝으로 가보자!
일단 그냥 키 맵핑을 해서 value가 key가 될 수 있도록 한다.

route만 맵핑하면

이렇게 된다. 이제 각 value는 search의 value를 가져와야 한다.
여기에 사용할 수 있는 아주 적절한 Extract라는 녀석을 사용해보자


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



아주 완벽하게 가져오는 것을 확인할 수 있다.
사실 as를 사용한 더 쉬운 방법이 있다.

(여기부터 살짝 머리가 안 돌아간다)
[R in Route]:은 Route 유니온 타입의 각 객체를 순회한다. as R["route"]를 통해 각 객체의 route 값을 새 키로 사용한다.이제 위와 동일하게 search도 해주면 된다.

아주 깔끔하게 완성이다.
참고 : total typescript