# 对象类型

原文地址 (opens new window)

在本教程中,你将学习 TypeScript 中的对象数据类型,以及如何更加准地编写对象类型声明。

# TypeScript 中的对象类型介绍

TypeScript 中的 object 类型代表所有不是原始类型的值,TypeScript 中原始类型有以下这些:

  • number
  • bigint
  • string
  • boolean
  • null
  • undefined
  • symbol

下面的例子展示了如何声明一个保存对象的变量:

let employee: object;

employee = {
  firstName: 'John',
  lastName: 'Doe',
  age: 25,
  jobTitle: 'Web Developer',
};

console.log(employee);
1
2
3
4
5
6
7
8
9
10

输出:

{
  firstName: 'John',
  lastName: 'Doe',
  age: 25,
  jobTitle: 'Web Developer'
}
1
2
3
4
5
6

如果你给 employee 对象赋值一个原始类型的值,将得到一个错误提示:

employee = 'Jane';
1

错误提示:

error TS2322: Type '"Jane"' is not assignable to type 'object'.
1

employee 对象是一个具有固定属性列表的 object 类型,如果你尝试去访问 employee 对象中不存在的属性,将得到一个错误提示:

console.log(employee.hireDate);
1

错误提示:

error TS2339: Property 'hireDate' does not exist on type 'object'.
1

注意:上面的语句在 JavaScript 中能正常地运行,它会返回 undefined

要显式地指定 employee 对象的属性,首先使用下面的语法定义 employee 对象:

let employee: {
  firstName: string;
  lastName: string;
  age: number;
  jobTitle: string;
};
1
2
3
4
5
6

然后你给 employee 对象赋值一个具有上面所有属性的对象:

employee = {
  firstName: 'John',
  lastName: 'Doe',
  age: 25,
  jobTitle: 'Web Developer',
};
1
2
3
4
5
6

也可以把两种语法组合在一个语句中,如下所示:

let employee: {
  firstName: string;
  lastName: string;
  age: number;
  jobTitle: string;
} = {
  firstName: 'John',
  lastName: 'Doe',
  age: 25,
  jobTitle: 'Web Developer',
};
1
2
3
4
5
6
7
8
9
10
11

# object vs Object

TypeScript 有另外一种类型,叫做 Object 类型,它的字符 O 是大写的,理解它们之间的区别是非常有必要的。object 类型代表所有的非原始类型的值,而 Object 类型描述的是所有对象具有的功能。例如,Object 类型具有可以被任何对象访问的 toString()valueOf() 方法。

# 空类型 {}

TypeScript 有另外一个类型叫空类型,使用 {} 表示,它和 object 类型非常相似。空类型 {} 描述一个本身没有任何属性的对象,如果你尝试去访问这种类型的对象的某个属性,TypeScript 会发出一个编译时错误的提示:

let vacant: {};
vacant.firstName = 'John';
1
2

错误提示:

error TS2339: Property 'firstName' does not exist on type '{}'.
1

但可以通过 原型链 (opens new window) 访问所有在 Object 类型上定义的属性和方法:

let vacant: {} = {};

console.log(vacant.toString());
1
2
3

输出:

[object Object]
1

# 小结

  • TypeScript 中的 object 类型代表所有的非原始类型的值;
  • Object 类型描述所有对象具有的功能;
  • 空类型 {} 描述一个自身没有任何属性的对象。