LoginSignup
20
11

More than 3 years have passed since last update.

配列や連想配列から、その要素のunion型を生成する

Last updated at Posted at 2020-07-06

配列からunion型を生成する

const sakana = ['アジ', 'サンマ', 'イワシ'] as const

ここから
'アジ' | 'サンマ' | 'イワシ'を生成する場合、

type Sakana = typeof sakana[number]

とするようです。

スクリーンショット 2020-07-06 23.08.09.png

添字に数字を入れると、その添字の要素の型となる。
スクリーンショット 2020-07-06 23.21.11.png

連想配列の配列からunion型を生成する

const sakana = [
  { name: 'アジ', code: 0 },
  { name: 'サンマ', code: 1 },
  { name: 'イワシ', code: 2 },
] as const

ここから
'アジ' | 'サンマ' | 'イワシ'を生成する場合、

type SakanaName = typeof sakana[number]['name']

とするようです。
スクリーンショット 2020-07-06 23.10.36.png

連想配列からunion型を生成する。

const sakana = {
  アジ: 0,
  サンマ: 1,
  イワシ: 2,
} as const

ここから
'アジ' | 'サンマ' | 'イワシ'0 | 1 | 2を生成する場合、

type SakanaName = keyof typeof sakana//'アジ' | 'サンマ' | 'イワシ'
type SakanaCode = typeof sakana[SakanaName]//0 | 1 | 2

とするようです。
スクリーンショット 2020-07-06 23.14.47.png
スクリーンショット 2020-07-06 23.15.12.png

まとめ

値からLiteral Typesを生成する場合、as constをつける。
配列の要素の型を取りたい場合、添字箇所にnumberと入れる。
連想配列のvalueのほうの要素の型を取りたい場合、添字箇所に、キーを文字列で入れる。
連想配列のキーのunion型を取りたい場合は、連想配列の型に対してkeyofする。

オマケ

JetBrainsのIDEで、↓とすれば、カーソルが当たっているところの型が見れるようです。

スクリーンショット 2020-07-06 23.08.21.png

参考資料

TypeScript3.4 の const assertion - Qiita
忙しい人のためのIntelliJ IDEAショートカット集(´-`) - Qiita

20
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
11