✍ 공부/TypeScript

[type-challenges] Merge

Po_tta_tt0 2023. 6. 27. 08:22
반응형

문제

두개의 타입을 새로운 타입으로 병합하세요.
두번째 타입이 첫번째 타입을 덮어씁니다.

설명


/* _____________ Your Code Here _____________ */

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


/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'


type Foo = {
  a: number
  b: string
}
type Bar = {
  b: number
  c: boolean
}

type cases = [
  Expect<Equal<Merge<Foo, Bar>, {
    a: number
    b: number
    c: boolean
  }>>,
]

접근방법

  1. 객체로 만들어야 하니까 {} 내부에서 작성하면 되겠다!
  2. 두 객체의 key를 다 돌아야 하니까 배열 내부의 Union 타입을 이용해 돌면 되겠다(P == keyof F + keyof S)
  3. 두번째 요소인 S가 덮어써야 하기 때문에, S먼저 살펴본다
    P가 S 내부에 들어있는 key일 경우 value로 S[P]를 뽑고
    P가 F 내부에 들어있는 key일 경우 value로 F[P]를 뽑으면 되겠지!?!

잘 작동!🥳

반응형