TypeScript 実装から型をつくる方が良いケース

TypeScriptを使う場合は、普通は設計である型を先に定義し、それを元に実装をします。

しかし、逆に実装から型を作った方が良いケースもあります。そういう場合は typeof を使います。

type T1 = 'hoge' | 'foo' | 'bar'

const a: T1[] = ['hoge', 'foo', 'bar']

この例では hoge foo bar を二回書いてしまっています。

typeof を使って値から型を作ると以下のようになります。

const a = ['hoge', 'foo', 'bar'] as const
type T1 = typeof a[number]