为什么我不能使用类型为&#34的变量调用Object类型的方法;任何"?

时间:2016-07-01 22:56:53

标签: typescript

我的意思是:假设我像这样扩展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 个答案:

答案 0 :(得分:1)

  

我没有得到编译器的帮助。

对于类型为any的任何内容,编译器取消。毕竟,它甚至可能不是Object的延伸。

答案 1 :(得分:0)

Javascript中的某些内容(例如nullundefined)不是对象,因此我认为any从知识分子的角度来看不会暗示Object是有道理的。也就是说,Typescript有一个轻松的打字系统,将NullUndefined视为Object的{​​{3}},所以我猜他们可以制作了对象如果他们愿意,.prototype东西会显示类型为any的内容。