2016-09-18 14 views

答えて

6

タイプの互換性:レコードの

number 

if (!(y instanceof Object)) { 
    console.log(typeof y) 
} 

プリント名目上のタイピングではなく、構造のサブタイプに基づいています。それは言った、2次インタフェース定義を考えてみます。

interface IFoo { X: number } 
interface IBar { X: number; Y: number } 

IBarIFooを拡張していますか? No.

IFooIBarと互換性がありますか?はい。

IFooのメンバーはIBarのメンバーのサブセットです。したがって、IBarIFooに割り当てることができます。しかし、それは周りの他のように動作しません:

var x: IFoo; 
var y: IBar; 

x = y // all good 
y = x // type error, x has no Y member 

あなたは空のインターフェイスと考えると、すべてのタイプがObjectと互換性のある活字体でこの方法です。この方法で有効なタイプスクリプト値をObjectを受け入れる関数に渡すことができ、Javascriptのlibsが書き込まれる方法でうまくいく。

私は文書でType Compatibility、最後の段落についてはサブタイトルvs課題とお伝えすることをお勧めします。

+1

これは基本的に私が期待していた本質的な説明です(私はBoolをObjectと同型であると定義した空のインターフェースにboolを割り当てることができることに気づいた後です)。私は構造的なものか名目的なものかを理解していますが、非参照のタイプには適用されませんでした。これは、オブジェクトが本当に空のインターフェースを持っている程度に音が出ると思うのですが(数字やプリミティブな文字列にできないオブジェクトにできることがあることを考えれば)。 – Roly

+0

私は説明に満足しているので、私は答えを受け入れました。私は、数値(これは私の注意をモジュロにしているようですが)ではなく、関数型のサブタイプ化がボルケートになっているためです。新しい質問があります:http://stackoverflow.com/questions/39569016 – Roly

+1

私はここで、 Roly

関連する問題