技術とかの雑なToday I Learnedメモ

TypeScriptで空でない配列を表現するという記事

TypeScript で空でない配列を型で表現する記事

リーディングリスト消化、今日はワクチン接種 2 回目で副反応が出る前にぱぱっと書きました。

Typescript で空でない配列を型で表現する

JavaScript は空配列が falsy な値だったりするので、たしかにこういう型は需要があるかも。

以下記事内コード引用

type NonEmptyArray<T> = [T, ...T[]]

ぱっと見ただけじゃどんなことが起きてるのか分からないぞ。

まず、この型はタプル型と呼ばれるやつらしい。

TypeScript の型入門 - Qiita

たとえばtype Tuple = [stirng, number]なら、const arr: Tuple = ['hoge', 1]みたいな感じ。

これは長さ 2 の配列ということだが、配列なので配列のメソッドで操作して長さを変えたりすることができるらしいのであまり使わないほうがいいっぽい。

で、スプレッド構文を使った可変長のタプル型も作れるらしい。それが ↑ の NonEmptyArray みたいなやつかな。

Tに string を与えたとすると、[string, ...string[]]という型ということになる。

これは「最初の要素が string、2 番目以降の要素はなくてもいい(空配列でもいい)けどある場合は絶対に string」ということになり、少なくとも 1 つ以上の string の要素が確実に存在することになる。

なるほど……。

全然分からなくて、↑ の記事を見ながらこの投稿を書いていたら理解できた。

最初タプル型のことをまったく考慮してなくて、「[T]でいいんじゃないの?」と思ったんだけど、これだと配列の長さが 1 固定になってしまうのでダメでした。

仕組みがわかると、すご!という感想になる。これ考えたのすごいな……。

注意点として書いてあるけど、T[]として宣言されるとNonEmptyArray<T>とは認識されないらしい。これはもう公式からそういう型が出るのを待つしかないのかな。