質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

9174閲覧

typescriptのtypeのキー一覧を取得したい

sayum

総合スコア17

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2021/04/09 00:05

編集2021/04/09 00:08

いつもお世話になっております。
TypeScriptのtype一覧をarrayで取得したいのですが、方法はありますでしょうか

typescript

1type hoges = { 2hoge: string, 3fuga: number 4}

上記のコードがあった際に

json

1[hoge, fuga]

を取得したいです。

初歩的な質問で恐縮ですが、教えていただきたいです

typescript

1 2() => { 3 const keyArray: string[] = ["hoge","fuga"] // こういうふうに取得したいです。 4} 5

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

残念ながら、TypeScriptの型はトランスパイルで消えてしまうものなので、そこから実行時に使う情報を取る方法はありません。

なお、逆に「配列から型を定義する」方法はあります。

typescript

1// 配列の型から要素の型を抽出 2type ArrayElement<ArrayType extends readonly unknown[]> = ArrayType[number]; 3 4// as constとすることで、配列の型が中身ギチギチに設定される(readonly ['foo', 'bar']) 5const keys = ['foo', 'bar'] as const; 6 7type SomeObject = { 8 [k in ArrayElement<typeof keys>]: string; 9}

投稿2021/04/09 00:20

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sayum

2021/04/09 00:30

ご回答いただき、ありがとうございます。 >トランスパイルで消えてしまう そうなのですね、、ちょっと仕組みを理解してませんでした、、 追加の質問で申し訳ないのですが、 inteliJや、VScodeなどで、上記の方法で入力候補に出たりなどは行われるのでしょうか。
maisumakun
maisumakun

2021/04/09 00:34

(SomeObjectのインスタンスを作ろうとすると、fooやbarも候補として出てきます)
sayum

2021/04/09 00:43

ご丁寧にコードまでありがとうございます! そちらのページで試させていただきました! この書き方を色々使ってみようと今後思います。 これで型定義する場合のデメリットはありますか? 私が思うのは以下のデメリットなのですが、  ・一目で型定義が分かりづらい。  ・複数の型の定義をする場合const keys = ['foo', 'bar'] as const;が増える  ・上記の質問の内容をする場合keys.concat(key2, keys3)などとする必要がある お時間を頂いてしまって、申し訳ありませんが、よろしくおねがいします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問