Typescript2:Array <any>和Array <object>的区别

时间:2016-12-13 13:31:18

标签: typescript

将字段声明为Array<any>Array<Object>之间的区别是什么。

打字稿中是否有一些额外的收集工具?

3 个答案:

答案 0 :(得分:3)

您基本上是在询问anyObject之间的差异,并在docs about any中回答:

  

任何类型都是使用现有JavaScript的强大方式,   允许您逐步选择加入并选择退出类型检查   汇编。 您可能希望Object扮演类似的角色   用其他语言做的。但是Object类型的变量只允许你   为它们分配任何值 - 你不能调用任意方法   他们,甚至是那些确实存在的人:

let notSure: any = 4;
notSure.ifItExists(); // okay, ifItExists might exist at runtime
notSure.toFixed(); // okay, toFixed exists (but the compiler doesn't check)

let prettySure: Object = 4;
prettySure.toFixed(); // Error: Property 'toFixed' doesn't exist on type 'Object'.

答案 1 :(得分:3)

TypeScript中的Object与JavaScript中的相同。

不同之处在于any也接受原语:number不是对象,除非装箱到Number

因此,虽然Array<any>可以包含基元,但Array<Object>却不能。

TL; DR:不要使用Object

来源:TypeScript's Do's and Don'ts

答案 2 :(得分:2)

Object是类的根类型,因此没有属性,但Object.prototype上定义的固有属性除外。

any是一种动态类型,无论您在其上访问哪些属性,都会进行编译。

例如:

const a: Object = "Object"
a.length // ERROR

const b: any = "Any"
b.length // Compiles