【Typescript】モジュールをブラケット表記法で使う


import * as M from ""で読み込んだモジュールをブラケット記法[]で使いたい。

こんな感じで引数(変数)に対応したモジュールを使いたい場合にどうするか。

リテラル型のunion型で定義する

モジュールにないものにアクセスする可能性があるのでダメなのはわかる。

リテラルのunion型でコンテンツを列挙すればブラケットでアクセス可能になる。

でもこれだと数が多いときにどうすればいいんだろう。

配列化してunion化する

Object.keys(M)でコンテンツ一覧を配列化できる。

配列からunion型に変換する方法はあるだろうかと調べてみる。

TypeScript 3.4 で Array (string[]) を Union Type に変換する Tips

as constでリテラル配列として定義したものをnumberで制御してtypeofでリテラル列挙してる感じだろうか。

Object.keys(M)as constできないので結局stringになってしまいます。

keyof 演算子(ドキュメント

Objectなんて使わなくてもkeyofを使えばキー一覧のunion型を得られるらしい。

import * asで名前空間として定義したので型ではないと怒られる。

 

typeofをかまして使う。

これで想定通りの動きになる。

なんとなく見た目は気になるけどシンプルに解決できた。


コメントを残す

メールアドレスが公開されることはありません。