이 글은 제가 타입챌린지를 하면서 해석한 내용을 적는 글입니다. 틀린 내용이 있으면 댓글 달아주시면 감사하겠습니다.
제네릭인자로 받은 타입에 해당하는 속성만 리턴하는 타입이다.
as를 사용할 줄 안다면, 상당히 쉽다.
type PickByType<T extends object, U> = {
[P in keyof T as T[P] extends U ? P : never]: T[P]
}
/* _____________ 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 }>>,
]
[P in keyof T as T[P] extends U ? P : never]: T[P] : T의 키 값을 P라고 한다. 그런데(as), T[P]가 U라는 타입이라면, P를 리턴하고 아니라면 never를 리턴한다.
'Language > Typescript' 카테고리의 다른 글
타입챌린지 : 2693-EndsWith (medium) (0) | 2023.05.09 |
---|---|
타입챌린지 : 2688-StartsWith (medium) (0) | 2023.05.08 |
타입챌린지 : 2257-MinusOne (medium) (0) | 2023.05.04 |
타입챌린지 : 2070-Drop Char (medium) (0) | 2023.05.01 |
타입챌린지 : 1978-Percentage Parser (medium) (0) | 2023.04.27 |