配列からunion型を生成する
const sakana = ['アジ', 'サンマ', 'イワシ'] as const
ここから
'アジ' | 'サンマ' | 'イワシ'
を生成する場合、
type Sakana = typeof sakana[number]
とするようです。

連想配列の配列からunion型を生成する
const sakana = [
{ name: 'アジ', code: 0 },
{ name: 'サンマ', code: 1 },
{ name: 'イワシ', code: 2 },
] as const
ここから
'アジ' | 'サンマ' | 'イワシ'
を生成する場合、
type SakanaName = typeof sakana[number]['name']
連想配列からunion型を生成する。
const sakana = {
アジ: 0,
サンマ: 1,
イワシ: 2,
} as const
ここから
'アジ' | 'サンマ' | 'イワシ'
や0 | 1 | 2
を生成する場合、
type SakanaName = keyof typeof sakana//'アジ' | 'サンマ' | 'イワシ'
type SakanaCode = typeof sakana[SakanaName]//0 | 1 | 2
まとめ
値からLiteral Typesを生成する場合、as constをつける。
配列の要素の型を取りたい場合、添字箇所にnumber
と入れる。
連想配列のvalueのほうの要素の型を取りたい場合、添字箇所に、キーを文字列で入れる。
連想配列のキーのunion型を取りたい場合は、連想配列の型に対してkeyofする。
オマケ
JetBrainsのIDEで、↓とすれば、カーソルが当たっているところの型が見れるようです。

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