'any'vs 'Object'

我在看TypeScript代码时注意到他们使用了:

interface Blablabla {

   field: Object;

}

使用 "Object "与 "any "的好处是什么,如:

interface Blablabla {

  field: any;

}
解决办法

"Object "比 "any "更具限制性。比如说:

let a: any;
let b: Object;

a.nomethod(); // Transpiles just fine
b.nomethod(); // Error: Property 'nomethod' does not exist on type 'Object'.

Object "类没有 "nomethod() "函数,因此转码器会产生一个错误,确切地告诉你。如果你用any代替,你基本上是在告诉转码器,任何东西都可以,你没有提供关于a中存储的信息--它可以是任何东西!因此转码器会允许你使用any!因此,转码器将允许你对定义为any的东西做任何事情。

所以简而言之

  • any可以是任何东西(你可以在它上面调用任何方法等而不会出现编译错误)。
  • Object暴露了定义在Object类中的函数和属性。
评论(0)

alex的回答很好地解释了 "any "是TypeScript特有的东西。

Object指的是JavaScript的对象类型。常用的是{}或者有时是new Object。在javascript中的大多数东西都与对象数据类型兼容,因为它们继承自对象。但是anyTypeScript特定的,与所有东西双向兼容(不是基于继承)。例如::

var foo:Object; 
var bar:any;
var num:number;

foo = num; // Not an error
num = foo; // ERROR 

// Any is compatible both ways 
bar = num;
num = bar;  
评论(3)

Object似乎是一个比任何更具体的声明。来自TypeScript规范(第3节):

TypeScript中的所有类型都是一个顶级类型的子类型,称为 Any类型。any关键字引用这个类型。Any类型是 一个可以代表任何JavaScript值的类型,没有任何限制。 所有其他类型被归类为原始类型、对象类型或 类型参数。这些类型在其值上引入了各种静态约束。 它们的值。

还有:

Any类型是用来表示任何JavaScript值的。一个Any类型的值 Any类型支持与JavaScript中的值相同的操作,并且 对Any类型的操作会进行最小的静态类型检查 值进行静态类型检查。具体来说,任何名称的属性都可以通过 一个Any值和Any值可以作为函数或 具有任何参数列表的构造器。

对象不允许有同样的灵活性。

比如说:

var myAny : any;

myAny.Something(); // no problemo

var myObject : Object;

myObject.Something(); // Error: The property 'Something' does not exist on value of type 'Object'.
评论(2)