Open4
型周りのメモ(基礎から)

これをやった際のメモ
-
T extends any[]
の場合にT['length']
で長さが取れる -
T[number]
でTの各要素の値が取れる-
[K in T[number]]: K
で配列内の値をK,Vに持つ型を定義できる
-

- スプレッド構文は型でも使える
type Push<U extends any[], T> = [...U,T]
- Conditional Types
-
k extends keyof T ? T[k] : never
でkがTのキーの場合のみ採用するというのを表現できる-
k extends true
みたいなこともかける
-
-

- infer
- 型の推論をすることができる
-
T extends (infer R)[]
でジェネリクスで渡した型が配列の場合にその配列の要素の型を推論することができる - Promiseや配列の中でも使うことができる
-
T extends [infer U, ...any[]] ? U : never
で配列の先頭の値の型を取り出せる
-

- インデックスアクセス
-
Hoge['fuga']
でHogeのfugaプロパティの型を取れる -
T extends Hoge[number]
でTがHogeのプロパティかどうかをチェックできる
-
- 存在を知っておいたほうが良い系(中級くらいまで)
-
T extends string | number | bigint | boolean | null | undefined
の場合、${T}
が可能- 文字列としてのパターンマッチングに使える
- 文字列に対して
${infer Head}${infer Rest}
で先頭とそれ以外が分けれる -
T extends T
でunion distributionができる -
never extends never
はfalseになってしまうので[T] extends [never]
とする -
Awaited<T>
でPromiseの中身を取れる
-