🚀
Type Challengeに入門する
こんばんは。Type Challgeに入門する3日目です。本日は「タプルを受け取り、その各値のkey/valueを持つオブジェクトの型に変換する型を実装」するという問題です。
typeChallenge.ts
const tuple = [1, '2', 3, '4', tupple] as const;
TuppleToObject<typeof tuple>
// expected { 1: 1, '2': '2', 3: 3, '4': '4', 'tupple
// : 'tupple' }
実装に移ります。
今回はkeyとvalueの値が等しくなるので、Mapped Typeで左右に引数型
を配置します。
tuppleToObject.ts
type TupleToObject<T extends readonly any[]> = {
[Key in T[keyof T]]: Key
}
問題はT[keyof T]
の箇所ですが、ここがどうしてもうまくいきません。
回答を確認すると、
answer.ts
type TupleToObject<T extends readonly (string | number)[]> = {
[Key in T[number]]: Key
}
Tのkeyはnumber型
でなければいけなかったみたいです。配列にアクセスする際はarray[0]
,array[1]
のようにするからですね。
Type T[string]
is not assignable to type string | number | symbol
というのは配列にアクセスできない!ってことだったんですね。勉強になりました。
タプル型も普段使ったことがなかったのでこれから使っていきたいと思います。
Discussion