2016-07-01 4 views
1

私はこれの意味することは次のとおりです。私は次のようにObjectクラスを拡張したとので:私はタイプObjectの変数を持っている"any"型の変数を持つObject型のメソッドを呼び出すことができないのはなぜですか?

interface Object 
{ 
    doSomething(); 
} 

Object.prototype.doSomething = function() 
{ 
    //do something here 
}; 

場合は、私が呼び出すことができます。

var x: Object = ...; 
x.doSomething(); 
を、私はインテリセンスを取得し、コンパイル時の型チェック。

しかし、私はこれを行う場合:

var x: any = ...; 
x.doSomething(); 

を私はコンパイラからの助けを得るません。

しかし、すべての変数がObjectから継承しているので、私はこれを理解していません。コンパイラはObjectができることを知ってはいけません。anyもできるはずですか?私はそれがanyは、ビューのintelisenseポイントからObjectを意味するものではないことを理にかなっていると思いますので、そのようなnullundefinedとしてJavaScriptで

+2

私は質問の「should」部分に同意できないと思います。 '' any'と書くと、問題の値の型について何も知らないと言っているので、intelisenseも何も想定していないことは意味があります。 Object.prototypeからメソッドを呼び出すのが目的ならば、型宣言で 'any'の代わりに' Object'を使用すればもっと明確になります。 – hugomg

答えて

0

いくつかのものは、オブジェクトではありません。それはので、私は彼ら可能性は、彼らがしたい場合のObject.prototypeのものがタイプanyで物事のために現れてきたと思い活字体はObjectsubtypesとしてNullUndefinedを考慮リラックスしたタイピングシステムを持っている、と述べました。

1

私はコンパイラから助けを得ません。

コンパイラは、タイプanyを使って何にオフの手です。結局のところ、それはObjectから広がるものではないかもしれません。

+0

Objectを拡張せず、Object.prototypeからメソッドを呼び出せないものの例を挙げることはできますか? – hugomg

関連する問題