なぜこの正当なTypeScriptですか?TypeScript:なぜオブジェクト型の参照に代入可能な数値ですか?
var x: number = 5
var y: Object = x
確かに数字はObject
ではありません。一つは、xが暗黙的にオブジェクトに(自動箱入り)強制されていると思われるが、ないかもしれません:活字体で
$ tsc --version
Version 1.8.10
なぜこの正当なTypeScriptですか?TypeScript:なぜオブジェクト型の参照に代入可能な数値ですか?
var x: number = 5
var y: Object = x
確かに数字はObject
ではありません。一つは、xが暗黙的にオブジェクトに(自動箱入り)強制されていると思われるが、ないかもしれません:活字体で
$ tsc --version
Version 1.8.10
タイプの互換性:レコードの
number
if (!(y instanceof Object)) {
console.log(typeof y)
}
プリント名目上のタイピングではなく、構造のサブタイプに基づいています。それは言った、2次インタフェース定義を考えてみます。
interface IFoo { X: number }
interface IBar { X: number; Y: number }
IBar
はIFoo
を拡張していますか? No.
IFoo
はIBar
と互換性がありますか?はい。
IFoo
のメンバーはIBar
のメンバーのサブセットです。したがって、IBar
をIFoo
に割り当てることができます。しかし、それは周りの他のように動作しません:
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課題とお伝えすることをお勧めします。
これは基本的に私が期待していた本質的な説明です(私はBoolをObjectと同型であると定義した空のインターフェースにboolを割り当てることができることに気づいた後です)。私は構造的なものか名目的なものかを理解していますが、非参照のタイプには適用されませんでした。これは、オブジェクトが本当に空のインターフェースを持っている程度に音が出ると思うのですが(数字やプリミティブな文字列にできないオブジェクトにできることがあることを考えれば)。 – Roly
私は説明に満足しているので、私は答えを受け入れました。私は、数値
私はここで、