let a: {} = 1; // Ok
let b: object = 1; // Error
let c: Object = 1; // Ok,
let a: {} = 1; // Ok
let b: object = 1; // Error
let c: Object = 1; // Ok,
以下均假定strict=true
{}
(type): 按照规范是 empty object type
,但可以是primitive (即实际行为是除了null和undefined,可能是因为auto boxing)
Object
(type): 同上
object
(type): 除了primitives和null和undefined,即 "不autobox就已经是Object"
总之有点混乱,因为ts里除了正常的supertype/subtype还有个 "Assignment Compatibility"
首先
Object
与{}
应该很好理解:Object
: 一个对象,但是是包含了js原始的所有公用的功能。查看ts源码可以了解详情Object{}
: 一个空对象实例,无原型链,但是原生的js Object属性和方法还是可以支持的然后
object
:object
: 可以理解为一个新的对象属性,ES6引入,可以看一下它的用例->WeakMap,同样是键值对集合,特殊在键值也必须是对象。我的理解是这样,希望能有所帮助:)