likes
comments
collection
share

在 TypeScript 中,{},object 和 Object 表示三个不同的类型,它们的区别和用途

作者站长头像
站长
· 阅读数 26

在 TypeScript 中,{},object 和 Object 表示三个不同的类型,它们的区别和用途:

{} 表示一个空的对象,或者称为空类型(empty type)或者叫定位没有限制的对象类型(unrestricted object type),它表示没有属性和方法的纯对象。在 TypeScript 中,我们可以使用它来限制函数参数或返回值,例如:

function printObject(obj: {}) {
  console.log(obj);
}
printObject({name: 'John'}); // ok
printObject([]); // ok
printObject('hello'); // ok

在上面的代码中,我们定义了一个 printObject 函数,参数为 {},也就是空类型,表示这个函数可以接受任意类型的 object 作为参数,包括空对象、数组、字符串等等。

object 表示一个非原始类型的对象,也就是除了 number、string、boolean、symbol、null 和 undefined 以外的类型。它是 TypeScript 中的一个内置类型,可以用来约束函数参数和返回值。例如:

function printObject(obj: object) {
  console.log(obj);
}
printObject({name: 'John'}); // ok
printObject([]); // ok
printObject('hello'); // Error: Argument of type 'string' is not assignable to parameter of type 'object'.

注意:使用 object 约束参数时,只要对象中至少有一个属性存在,即可通过类型检查。

Object 表示 JavaScript 中的全局对象,也就是 window 或者 global 对象,主要是在浏览器和 Node.js 环境下使用。在 TypeScript 中,Object 表示这个全局对象的类型,通常用于约束复杂对象的类型。例如:

function getObjectKeys(obj: Object) {
  return Object.keys(obj);
}
getObjectKeys({name: 'John', age: 30}); // ['name', 'age']
getObjectKeys('hello'); // Error: Argument of type 'string' is not assignable to parameter of type 'Object'.

在上面的代码中,我们定义了一个 getObjectKeys 函数,它只接受 Object 类型的参数,并返回这个对象的所有属性名。由于 Object 表示全局对象,所以我们可以通过它的 keys 方法获取任意对象的属性名。

总之,在 TypeScript 中,{}、object、Object 三种类型都是表示对象类型的关键字,不同的是,它们的精确含义和用途略有不同。在使用时,我们需要根据具体需求来选择恰当的类型。