title: 对象类型

对象类型

原文地址

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

TypeScript 中的对象类型介绍

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

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

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

  1. let employee: object;
  2. employee = {
  3. firstName: 'John',
  4. lastName: 'Doe',
  5. age: 25,
  6. jobTitle: 'Web Developer',
  7. };
  8. console.log(employee);

输出:

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

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

  1. employee = 'Jane';

错误提示:

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

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

  1. console.log(employee.hireDate);

错误提示:

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

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

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

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

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

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

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

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

object vs Object

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

空类型 {}

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

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

错误提示:

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

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

  1. let vacant: {} = {};
  2. console.log(vacant.toString());

输出:

  1. [object Object]

小结

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