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

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

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

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

Q&A

解決済

1回答

418閲覧

TypeScriptのArray[]と[,...[]]の型比較について

shinyaigeek

総合スコア112

TypeScript

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

0グッド

0クリップ

投稿2020/05/13 08:42

https://www.typescriptlang.org/v2/play?#code/JYOwLgpgTgZghgYwgAgBIHsDmKDeAoZQ5YAEwC5kQBXAWwCNo8BfPPUSWRFADQ22QgAPSCBIBnNFlwEiNOMAA2AfgpiwUUJmasSEBArhQUCiGEIALKRT4QA3Hl37Dx08kGXsFXlPt53U5ABeZA87ZAB6cOQAeQBpHT0DI2QTM1CxaykAbQBde0cklzNBGwzkLO9sABpkADp6m1y81ki3UqCLKTFbCPD0dAAHCWgodCgQuAGBiBAxVjxWkq6OrIWoomR8Vo2N0mQKAEY1naYa442t9Z3CUgoAJnOiFlacmNigA

playgroundは上に貼っています

ざっくり言いますと

typescript

1interface Hoge { 2 id: number 3} 4 5interface XHoge extends Hoge { 6 mail?: string 7} 8 9declare let hoge: Hoge; 10declare let xhoge: XHoge; 11 12xhoge = hoge; // OK 13 14declare let hoges: Hoge[]; 15declare let xHoges: [XHoge, ...Hoge[]]; 16 17// xHoges = hoges; //oops error happens 18 19 20// xHoges = [ 21// { 22// id : 1 23// }, 24// { 25// id: 2 26// } 27// ] OK 28

これで

typescript

1xHoges = hoges;

でコンパイルエラーが生じます、tsは構造的部分型システムに乗っかっていると理解しているので、上記のコンパイルエラーが生じる理由がわかっていません(シンプルにバグかも?)

こういうことについて, これは結構ぶち当たるデベロッパー多そうで誰かがissue出してワークアラウンドとなんでこうなっているか紹介されてるでしょと思っていましたが,見当たらなくて困っています

誰か該当issueをご存知の方は教えていただきたいです
(またtscにdeep diveしたよという方がいらっしゃればどこでどういう実装をどういう思想のもと行ってこうなっているかも追記していただけると助かります)

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

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

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

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

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

guest

回答1

0

ベストアンサー

hoges の型は 0 個以上の Hoge インスタンスを含む配列ですが、
xhoges の方は、第一要素が XHoge, 以降任意の数の Hoge が連続するタプルで、第一要素は必須です。

例えば、空の配列は hoges には代入可能ですが、 xHoges には代入できません(第一要素の XHoge 型インスタンスが無いため)。

したがって型の互換性がないので、 xHoges = hoges; がエラーとなるのは妥当だと思います。

投稿2020/05/13 08:50

R.Mizukami

総合スコア1086

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

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

shinyaigeek

2020/05/13 08:54

あーーなるほど、言われてみればそれはそうでしたね! 理解できました、ありがとうございます????‍♂️
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問