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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

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

Q&A

1回答

947閲覧

TypeScript const union valueから特定のtypeを抜き出す方法

_Victorique__

総合スコア1392

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

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

0グッド

1クリップ

投稿2020/08/12 17:47

編集2020/08/13 03:34

以下の const union が定義されているとします。

ts

1const Animal = { 2 Dog: 1, 3 Cat: 2, 4 Mouse: 3, 5} as const; 6 7type Animal = typeof Animal[keyof typeof Animal];

この時、以下の入力から出力の値を得る方法はあるでしょうか?
switch 等で調べることは可能ですが、手間なので簡単な方法があれば知りたいです。
as による cast はなしでお願いします。

ts

1// input 2const i: number = 2; 3 4// output 5type Test = { 6 o: Animal; 7}; 8 9const test: Test = { 10 o: i, // error 11};

TypeScript

v3.9.2

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

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

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

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

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

maisumakun

2020/08/12 21:46

結果としては、"Cat"というキーを得たいのでしょうか、それとも別なことをしたいのでしょうか?
maisumakun

2020/08/12 22:47

「const o: Animal = Animal.Cat;」とありますが、Animal.Catの中身はnumber型なので、この文は型が一致しません。
_Victorique__

2020/08/13 03:36

@maisumakun 申し訳ないです、前提条件を修正したので確認お願いします! 修正したものでは test object の o に 単純に number をあてがおうとするとエラーになります。 これを簡単に回避したいというものです!
guest

回答1

0

修正したものでは test object の o に 単純に number をあてがおうとするとエラーになります。

これを簡単に回避したいというものです!

const i: Animal = 2;

inputの値をAnimalとすることで型チェックとしてははじけるのではないかと思ったのですが、これだと実現したいこととはずれますか?

投稿2020/08/17 12:45

kmtr

総合スコア213

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

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

_Victorique__

2020/08/17 14:10

最初からその値がAnimalに含まれるか分からない場合、怒られる気がするのですがどうでしょうか?
kmtr

2020/08/17 15:33

すみません、最初からその値がAnimalに含まれるか分からない場合というのがどういうケースなのか、例示していただくことは可能ですか?
_Victorique__

2020/08/17 17:24

APIリクエストでフェッチしたデータや、純粋に関数に渡された引数などは未知ですよね?そういうケースは怒られてしまうと思います。
kmtr

2020/08/18 02:25

TypeScriptは静的型付で実際に実行されるJavaScriptはそうではないので、書かれているようにswitch 等で調べたりなど下記のURLのような対応は必要になってくると思います。 https://qiita.com/kgtkr/items/b9820df6bcab72aea8b6 APIリクエストでフェッチしたデータや純粋に関数に渡された引数にも型付しておくことで、未然に気付くことは多少出来るかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問