Ts challenge(3) - Merge

김영현·2024년 5월 16일
0

ts challenge

목록 보기
3/6

Merge

두 객체의 타입을 합치는 유틸타입이다. 주의할점은 뒤 타입 프로퍼티가 앞 타잎 프로퍼티에도 존재하면 타입을 덮어쓴다.

첫번째 풀이

type Merge<F, S> = {
  [K in keyof F]: K extends keyof S ? S[K] : F[K]
} & S;

F를 기준으로 키를 순회한다. 이때 키K가 S에도 속하면 S의 K타입을 넣어주고, 속하지 않는다면 F의K타입을 넣어준다.
이후 S의 타입을 전부 &기호로 합쳤지만, 어째선지 오류가 발생했다.

두번째 풀이

type Merge<F, S> = {
  [P in keyof (F & S)]: P extends keyof S ? S[P] : P extends keyof F ? F[P] : never
}

위와 비슷한 방법이지만 차이가 조금있다.

  • P를 가져올때 FS를 합친 곳에서 키를 가져온다.
  • P extends keyof S ? S[P] : F[P]는 할 수 없다. F & S로 합쳤기에, 컴파일러는 P키가 F, S중 어느곳에 속해있는지 아직 모른다. 따라서 삼항연산자를 두번 활용해야한다.

느낀점

아직도 타입스크립트는 잘 모르겠다. 동작원리 자체에 대해 알아야 이해가 빠를 것 같다. 연산자도 헷갈리고...컴파일러가 타입을 받아들이는 방식을 익힐 필요성이 있다.

다음에는 타입스크립트의 동작원리를 파헤쳐보는 시간을 갖겠음!

profile
모르는 것을 모른다고 하기

0개의 댓글

Powered by GraphCDN, the GraphQL CDN