2022/07/09「開始」

これは、Twitterでブログを始めた人がいたから、僕もしてみたくなった。それだけ。目指せ三日坊主

TypeScriptの型演算を学べるType Challengeを始めようかなって思った
https://github.com/type-challenges/type-challenges

00004-easy-pick
たぶん1番簡単なやつ

#typescript
/* _____________ Your Code Here _____________ */

type MyPick<T, K> = any


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

type cases = [
  Expect<Equal<Expected1, MyPick<Todo, 'title'>>>,
  Expect<Equal<Expected2, MyPick<Todo, 'title' | 'completed'>>>,
  // @ts-expect-error
  MyPick<Todo, 'title' | 'completed' | 'invalid'>,
]

interface Todo {
  title: string
  description: string
  completed: boolean
}

interface Expected1 {
  title: string
}

interface Expected2 {
  title: string
  completed: boolean
}

「MyPick<T, K>」を実装するかんじ

#typescript
type MyPick<T, K extends keyof T> = { [P in K]: T[P] }

自分で書いたのがこれ。素直だ

#typescript
type MyPick<T extends Record<string, any>, K extends string> = { [P in K]: T[P] }
type MyPick<T extends object, K extends keyof T> = { [Key in K]: T[Key] }

ほかの人の解答も見れるのだけど、Tをもう少し厳しくできるっぽい

終わり


いいなと思ったら応援しよう!