🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
TypeScript

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

Q&A

解決済

1回答

588閲覧

TypeScriptの共用体で質問があります

TuTettuuu

総合スコア12

TypeScript

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

0グッド

1クリップ

投稿2020/12/13 01:43

編集2020/12/13 03:00

前提・実現したいこと

TypeScriptの共用体で質問があります

これはわかる

type A = { id: number, name: string } type B = { id: number } type AandB = A[] | B[] const func = (props: AandB) => { props.map(item => item); //型エラーが発生する }
  • 上記のように、配列と配列の共用体に対してmapを使うとするとエラーになるのはわかります。
  • あくまで共用体の型に対してmapをしようとしているので (A | B)[] にすれば型エラーは消えます。
type A = { id: number, name: string } type B = { id: number } type AandB = (A| B)[] const func = (props: AandB) => { props.map(item => item); // OK }

これがわからない

type A = { id: number } type B = { id: number } type AandB = A[] | B[] const func = (props: AandB) => { props.map(item => item); // 型エラーがおきない!?!? }
  • 共用体に対してmapしているのに、型エラーがおきません。
  • 共用体元の構造体が同じだと型エラーにならないんですかね。。?
  • 上の例と違って型エラーが起きない原因が知りたいです。

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

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

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

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

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

miyabi_takatsuk

2020/12/13 02:42

具体的なエラー文を記載いただけませんか? そこに答えが出ていると思います。
TuTettuuu

2020/12/13 02:55

共用体に対してmapしているのにエラーが起きなくて、 エラー文が出てこず困っています。。
miyabi_takatsuk

2020/12/13 03:06 編集

いえ、エラーが出ている方のエラー文です。 そのエラー内容を見ればその答えが出るような気がします。 (エラーが出ない理由も、エラーが出ている方から読み取れる可能性があります)
guest

回答1

0

ベストアンサー

TypeScriptは、オブジェクトリテラルによる型については、同じ構造なら同じ型とみなされます。

つまり、後の例では、AとBは「同じ型についた別名」という扱いになります。

投稿2020/12/13 03:12

maisumakun

総合スコア145975

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

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

maisumakun

2020/12/13 03:19

その結果、A[]とB[]も同じ型なので、A[] | B[]と書いても、単体でA[]あるいはB[]とだけ書いたのと同じ意味になります。
TuTettuuu

2020/12/14 00:58

なるほど、理解しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問