试图找出TypeScript中这两种类型之间的区别:
foo: object

bar: {}

示例:尝试将object分配给假定用于处理请求 header 信息的变量:

headers: object;

导致错误:



如果使用headers: {},则通过相同的条件,这导致结论{}的严格要求略低。

最佳答案

TypeScript具有三种令人困惑的类型:Object{}object
如果禁用了null编译器选项,则可以将undefinedstrictNullChecks分配给所有这三种类型,否则会发生编译错误。
目的
包含所有JavaScript对象中存在的内容(例如toString()hasOwnProperty())。可以将任何值(原始,非原始)分配给Object类型。
{}{}是一个空对象。它与Object相同。
目的object was introduced in TypeScript 2.2。它是任何非基本类型。您不能为其分配任何原始类型,例如boolnumberstringsymbol
因此,如果您尝试这样做:

var strictTypeHeaders: { [key: string]: string } = {}; // non-primitive type
var header: object = {};
header = strictTypeHeaders; // its OK
strictTypeHeaders = header; // causes error "Type 'object' is not assignable to type '{ [key: string]: string }`"
您将在最后一行收到编译错误。发生这种情况是因为{ [key: string]: string }类型比object类型更具体。 header = strictTypeHeaders没有任何错误,因为这两种类型都是非原始类型,并且object{ [key: string]: string }更常见

10-05 20:51
查看更多