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をもう少し厳しくできるっぽい
終わり