object、Object 以及 { }

  • Object,原型链的顶端,也就是说所有的原始类型与对象类型最终都指向 Object,在 TypeScript 中表现为 Object 包含了所有的类型。
// 注意对于前三个要关闭 strictNullChecks 才不会报错
const tmp1: Object = undefined;
const tmp2: Object = null;
const tmp3: Object = void 0;

const tmp4: Object = 'aaa';
const tmp5: Object = 599;
const tmp6: Object = { name: 'aaa' };
const tmp7: Object = () => {};
const tmp8: Object = [];
  • object 的引入就是为了解决对 Object 类型的错误使用,它代表所有非原始类型的类型,即数组、对象与函数类型。
// 注意对于前三个要关闭 strictNullChecks 才不会报错
const tmp17: object = undefined;
const tmp18: object = null;
const tmp19: object = void 0;

const tmp20: object = 'aaa'; // 报错
const tmp21: object = 599; // 报错
const tmp22: object = { name: 'aaa' };
const tmp23: object = () => {};
const tmp24: object = [];
  • {} 就是一个字面量类型。

建议:

  • 在任何时候都不要使用 Object 以及类似的装箱类型比如 String Number 等等。
  • 当你不确定某个变量的具体类型,但能确定它不是原始类型,可以使用 object。但更推荐进一步区分,也就是使用 Record<string, unknown>Record<string, any> 表示对象,unknown[] 或 any[] 表示数组,(...args: any[]) => any 表示函数,类似这样。