TypeScript 对象类型详解

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

TypeScript 中的对象类型介绍

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

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

let employee: object;

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

console.log(employee);

输出:

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

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

employee = 'Jane';

错误提示:

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

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

console.log(employee.hireDate);

错误提示:

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

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

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

let employee: {
  firstName: string;
  lastName: string;
  age: number;
  jobTitle: string;
};

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

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

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

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

object vs Object

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

空类型 {}

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

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

错误提示:

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

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

let vacant: {} = {};

console.log(vacant.toString());

输出:

[object Object]

小结

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

教程来源于Github,感谢cody1991大佬的无私奉献,致敬!

技术教程推荐

朱赟的技术管理课 -〔朱赟〕

零基础学Python -〔尹会生〕

技术管理实战36讲 -〔刘建国〕

程序员的数学基础课 -〔黄申〕

Python核心技术与实战 -〔景霄〕

爱上跑步 -〔钱亮〕

Spark性能调优实战 -〔吴磊〕

快速上手C++数据结构与算法 -〔王健伟〕

互联网人的数字化企业生存指南 -〔沈欣〕