問題
組み込みの型ユーティリティPick<T, K>
を使用せず、T
からK
のプロパティを抽出する型を実装します。
例えば:
interface Todo {
title: string
description: string
completed: boolean
}
type TodoPreview = MyPick<Todo, 'title' | 'completed'>
const todo: TodoPreview = {
title: 'Clean room',
completed: false,
}
ユーティリティ関数Pickを実装せよという問題です。
回答は以下です
↓
↓
回答
type MyPick<T, K extends keyof T> = {
[key in K]:T[key]
}
簡単に解説をします。
-
K extends keyof T
extends
は「型引数に制約をつける」ものです。
つまり、ここではK
をkeyof T
であると型システムに知らせている形になります。
これによって、後続のkey in K
やT[key]
がエラーとならずにすみます。
-
[key in K]
in
はここではMapped Typesとして使用されます。
K
(=keyof T
)を反復している感じですね