TypeScript 中类型 object 和类型 Object 的区别

2024-08-11 564字

在 TypeScript 开发过程中,有时需要定义对象类型的变量。但在选择类型时,很多人会对 objectObject 这两个选项感到困惑。本文将详细解释它们之间的关键区别。

object 类型

object 表示所有 非原始类型(non-primitive types)

JavaScript 的原始类型包括:numberstringbooleansymbolbigintnullundefinedobject 类型则用于表示这些原始类型之外的所有类型,即所有对象类型。从本质上讲,object 类型的作用是确保变量必须是对象,而不能是原始值。

具体示例如下:

let a: object;

a = 1;                        // ❌ 错误:不能将类型 “number” 分配给类型 “object”
a = “hi”;                     // ❌ 错误:不能将类型 “string” 分配给类型 “object”
a = true;                     // ❌ 错误:不能将类型 “boolean” 分配给类型 “object”
a = Symbol();                 // ❌ 错误:不能将类型 “symbol” 分配给类型 “object”
a = null;                     // ❌ 错误:不能将类型 “null” 分配给类型 “object”
a = undefined;                // ❌ 错误:不能将类型 “undefined” 分配给类型 “object”
a = BigInt(9007199254740991); // ❌ 错误:不能将类型 “bigint” 分配给类型 “object”

a = {};              // ✅ 正确:对象字面量
a = [1, 2];          // ✅ 正确:数组也是对象
a = function() {};   // ✅ 正确:函数也是对象
a = new String(“1”); // ✅ 正确:包装器对象

Object 类型

Object 表示所有继承自 Object.prototype 的值,几乎涵盖了除 nullundefined 之外的所有类型。因此可以简单理解为:Object 表示除 nullundefined 之外的所有值。

具体示例如下:

let b: Object;

b = null;       // ❌ 错误:不能将类型 “null” 分配给类型 “Object”
b = undefined;  // ❌ 错误:不能将类型 “undefined” 分配给类型 “Object”

// 以下赋值全部合法
b = 1;
b = “hi”;
b = true;
b = Symbol();
b = {};
b = [1, 2];
b = function() {};
b = new String(“1”);
b = BigInt(9007199254740991);

总结

#TypeScript