メインへジャンプ

ushironoko.me

カラーコードの Template Literal Types(敗北編)

2021/10/06 ⏳ 1 min read

2021-10-06 日報。

  • カラーコードのリテラル型が作りたかった
    • '#' から始まる6桁の0-9A-Fa-f
    • template literal types で作れるんじゃね?と思った
    • f_subal さんからの案
      • 愚直に各桁で出てくる文字の UnionType で6桁分埋める
      • 5個めで UnionType が複雑すぎるというエラーになった
        • Expression produces a union type that is too complex to represent
      • 同じような要件で GUID を型で表現したいというもの
      • 4桁から5桁に増やすとパターンが61443個増える
      • 5桁から6桁で組合せ爆発の許容閾値を超えるっぽい
        • どこまでいけるかは面倒なのでしらべてない
    • 結局諦めて内部で Type Guard するに落ち着いた
    • 記法として実現できないわけじゃないので、正規表現で型が導出できるようになったとしても解決しなさそう
      • むしろ正規表現で出来ちゃうとパターンが多すぎるという理由で実装されてないのかもしれない
type HEX = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f
type ColorCode = `#${HEX}${HEX}${HEX}` | `#${HEX}${HEX}${HEX}${HEX}${HEX}${HEX}` // Expression produces a union type that is too complex to represent