2016-07-01 9 views
1

我的意思是這樣的:假設我擴展了Object類,像這樣:爲什麼我無法使用「any」類型的變量調用Object類型的方法?

interface Object 
{ 
    doSomething(); 
} 

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

如果我有Object類型的變量,我可以打電話:

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

,我也得到IntelliSense和編譯時間類型檢查。

但是,如果我這樣做:

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

我沒有得到任何來自編譯器的幫助。

但是我不明白這一點,因爲所有變量都從Object繼承,編譯器不知道Object能做什麼,any也應該可以做到嗎?

+2

我不確定我同意你的問題的「應該」部分。當我們寫「任何」時,我們都說我們不知道任何有關價值的類型,所以知識產權也不承擔任何事情。如果我們的意圖是從Object.prototype調用方法,那麼如果我們在類型聲明中使用Object而不是'any',那麼它會更清晰。 – hugomg

回答

0

在Javascript中的一些東西,比如nullundefined沒有對象,所以我想這是有道理的,any不會從一個角度智能感知點意味着Object。也就是說,Typescript有一個輕鬆的打字系統,認爲NullUndefinedsubtypesObject所以我猜他們可能已經使Object.prototype的東西顯示爲類型any如果他們想要的東西。

1

我沒有得到編譯器的幫助。

編譯器是手離開any類型什麼。畢竟,它可能不是從Object延伸的東西。

+0

你可以給出一個不擴展Object的例子,並且你不能從Object.prototype中調用方法嗎? – hugomg

相關問題