union type에 있는 키를 바꾸고, 만약 그 키가 일부 타입에 없으면 바꾸지않는 ReplaceKeys 타입을 구현해라. 이 타입은 제네릭 3개를 받는다.
Implement a type ReplaceKeys, that replace keys in union types, if some type has not this key, just skip replacing, A type takes three arguments.
type ReplaceKeys<U extends object, T extends keyof any, Y extends object> ={
[R in keyof U]:R extends T?
R extends keyof Y?
Y[R]
:never
: U[R]
}
문제가 너무 복잡하고 요구사항도 제대로 기술되어 있지 않아서, 테스트 케이스를 통과시키는 풀이를 만들었다. U의 key 타입이 T에 있으면 Y[R]을 사용하고 그렇지 않으면 never를 사용한다. 만약 U의 key 타입이 T에 없으면 U[R]을 사용한다.
많은 풀이가 비슷했다.