参考
一文读懂 TS 中 Object, object, {} 类型之间的区别(优先看)
总结
obejct:TypeScript 2.2 引入的新类型,它用于表示非原始类型,没有值,toString()这种,代表非原始值,不包含原始值(number,boolean.....),对 object 类型的变量进行赋值时,如果值对象属性名与 Object 接口中的属性冲突,TypeScript 编译器不会提示任何错误
// 例1 const a:object = {} a = { b: 1 } // 例2 function c(o:object) { } c({d:2}) // 例3 const obj2: object = { toString() { return 123 } };
Object:它是所有 Object 类的实例的类型,它由两个接口来定义,有值,toString()这种,包含非原始值(对象)也包含原始值(number,boolean.....),对 Object 类型的变量进行赋值时,如果值对象属性名与 Object 接口中的属性冲突,则 TypeScript 编译器会提示相应的错误
// 例1 function func1(x: Object) { } func1('semlinker'); // OK // 例2 const obj2: Object = { toString() { return 123 } // Error };
空类型{}:它描述了一个没有成员的对象。当你试图访问这样一个对象的任意属性时,TypeScript 会产生一个编译时错误
// 例1 const obj = {}; // Error: Property 'prop' does not exist on type '{}'. obj.prop = "semlinker"; // 例2 const pt = {}; // (A) // Property 'x' does not exist on type '{}' pt.x = 3; // Error // Property 'y' does not exist on type '{}' pt.y = 4; // Error // 例3 interface Point { x: number; y: number; } // Type '{}' is missing the following // properties from type 'Point': x, y(2739) const pt: Point = {}; // Error pt.x = 3; pt.y = 4; // 例4 const obj = {}; obj.toString(); // 例5 const pt = { x: 666, y: 888 }; const id = { name: "semlinker" }; const namedPoint = {}; Object.assign(namedPoint, pt, id); // Property 'name' does not exist on type '{}'.(2339) namedPoint.name; // Error // 例6 const pt = { x: 666, y: 888 }; const id = { name: "semlinker" }; const namedPoint = {...pt, ...id} namedPoint.name // Ok