我在看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
类中的函数和属性。alex的回答很好地解释了 "any "是TypeScript特有的东西。
Object
指的是JavaScript的对象
类型。常用的是{}
或者有时是new Object
。在javascript中的大多数东西都与对象数据类型兼容,因为它们继承自对象。但是any
是TypeScript特定的,与所有东西双向兼容(不是基于继承)。例如::
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;
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'.