我正在看TypeScript代码,并注意到他们使用:
interface Blablabla {
field: Object;
}
使用Object和any的好处是什么,比如:
interface Blablabla {
field: any;
}
我正在看TypeScript代码,并注意到他们使用:
interface Blablabla {
field: Object;
}
使用Object和any的好处是什么,比如:
interface Blablabla {
field: any;
}
当前回答
与。net中所有类型都派生于“object”相反,在TypeScript中,所有类型都派生于“any”。我只是想添加这个比较,因为我认为随着越来越多的。net开发人员尝试TypeScript,它会成为一个常见的比较。
其他回答
与。net中所有类型都派生于“object”相反,在TypeScript中,所有类型都派生于“any”。我只是想添加这个比较,因为我认为随着越来越多的。net开发人员尝试TypeScript,它会成为一个常见的比较。
补充一下Alex的回答并简化一下:
对象对它们的使用更加严格,因此给程序员更多的编译时“评估”能力,因此在很多情况下提供更多的“检查能力”,并可以防止任何泄漏,而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类没有nmethod()函数,因此转译器将生成一个错误,准确地告诉您这一点。如果你使用any来代替,你基本上是在告诉转译器任何事情都会发生,你没有提供任何关于存储在a中的内容的信息——它可以是任何东西!因此,转译器将允许你对定义为any的东西做任何你想做的事情。
简而言之
Any可以是任何东西(你可以在它上面调用任何方法等而不会出现编译错误) 对象公开Object类中定义的函数和属性。
any是TypeScript特有的东西,alex的回答解释得很好。
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;