두 객체의 타입을 합치는 유틸타입이다. 주의할점은 뒤 타입 프로퍼티가 앞 타잎 프로퍼티에도 존재하면 타입을 덮어쓴다.
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
를 가져올때 F
와 S
를 합친 곳에서 키를 가져온다. P extends keyof S ? S[P] : F[P]
는 할 수 없다. F & S
로 합쳤기에, 컴파일러는 P
키가 F, S
중 어느곳에 속해있는지 아직 모른다. 따라서 삼항연산자를 두번 활용해야한다.아직도 타입스크립트는 잘 모르겠다. 동작원리 자체에 대해 알아야 이해가 빠를 것 같다. 연산자도 헷갈리고...컴파일러가 타입을 받아들이는 방식을 익힐 필요성이 있다.
다음에는 타입스크립트의 동작원리를 파헤쳐보는 시간을 갖겠음!