✍ 공부/TypeScript

[type-challenges] PickByType

Po_tta_tt0 2023. 7. 25. 20:19
반응형

문제

U에서 T 유형을 가진 속성들의 집합을 꺼냅니다

설명

/* _____________ Your Code Here _____________ */

type PickByType<T, U> = {[K in keyof T as T[K] extends U ? K: never]:T[K]}

type t = PickByType<Model, boolean>

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

interface Model {
  name: string
  count: number
  isReadonly: boolean
  isEnable: boolean
}

type cases = [
  Expect<Equal<PickByType<Model, boolean>, { isReadonly: boolean; isEnable: boolean }>>,
  Expect<Equal<PickByType<Model, string>, { name: string }>>,
  Expect<Equal<PickByType<Model, number>, { count: number }>>,
]

집중해야 할 점은 as다

  • K in keyof T T의 key를 K로 보고
  • as T[K] extends U 위의 value가 U를 extends하면?? K를 출력하고 아니면 never
  • 예전에 했던 것 같은데, 객체에서 key를 never로 두면 절대! 오면! 안돼!! 라는 표현이다
반응형