Open4

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

tt
  • スプレッド構文は型でも使える
    • type Push<U extends any[], T> = [...U,T]
  • Conditional Types
    • k extends keyof T ? T[k] : neverでkがTのキーの場合のみ採用するというのを表現できる
      • k extends trueみたいなこともかける
tt
  • infer
    • 型の推論をすることができる
    • T extends (infer R)[]でジェネリクスで渡した型が配列の場合にその配列の要素の型を推論することができる
    • Promiseや配列の中でも使うことができる
      • T extends [infer U, ...any[]] ? U : neverで配列の先頭の値の型を取り出せる
tt
  • インデックスアクセス
    • 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の中身を取れる