かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

TypeScrip 配列から値の Union 型を作りたい

const soleil = ['星宮いちご', '霧矢あおい', '紫吹蘭'] みたいな配列から '星宮いちご' | '霧矢あおい' | '紫吹蘭' という配列の値の Union 型が作りたい。

typeof list[number] で配列の値の Union 型が作れる!

const soleil = ['星宮いちご', '霧矢あおい', '紫吹蘭'] as const;
type MemberOfSoleil = typeof soleil[number];
// => type MemberOfSoleil = '星宮いちご' | '霧矢あおい' | '紫吹蘭'

できた ₍ ᐢ. ̫ .ᐢ ₎👌

typeof soleilreadonly ["星宮いちご", "霧矢あおい", "紫吹蘭"] という型になるので、配列の index は number なので typeof soleil[number] で配列の各要素を取り出してきた型という解釈になるっぽい。(厳密には分かってない。ゆるふわ解釈)

Object で定義する方が可読性は良いかも

ただ typeof Array[number] って表記は若干なんの型ができてるのか解りにくい気もするので、元を配列ではなくオブジェクトにしてしまってオブジェクトの値を取り出す形にした方が見やすいかも。変数を使用する箇所は Object.values() すれば配列として扱えるし。

オブジェクトで定義した版

const soleil = {
  ichigo: '星宮いちご',
  aoi: '霧矢あおい',
  ran: '紫吹蘭',
} as const;

type MemberOfSoleil = typeof soleil[keyof typeof soleil];
// => type MemberOfSoleil = '星宮いちご' | '霧矢あおい' | '紫吹蘭'

おわり。


[参考]

久々にアイカツ!を貼る!!!!!!