TypeStrcipt学习(八)Object, object, {} 类型之间的区别

参考

一文读懂 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

 

原文地址:https://www.cnblogs.com/kunmomo/p/15735710.html