TypeScript object 类型
简介:在本教程中,你将了解 TypeScript 的 object 类型以及如何编写更准确的 object 类型声明。
TypeScript object 类型介绍
TypeScript object 类型代表了所有不属于原始类型的值。
以下是 TypeScript 中的原始类型:
numberbigintstringbooleannullundefinedsymbol
下面展示了如何声明一个保存了对象的变量:
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 与 Object
TypeScript 有另一种 Object 用 O 字母大写命名的类型。了解它们之间的区别很重要。
object 类型表示所有非原始类型的数据,而类型 Object 描述所有对象的功能。
例如,Object 类型具有任何对象都可以访问的 toString() 和 valueOf() 方法。
空类型 {}
TypeScript 有另一种类型,称为空类型,用 {} 表示,它与对象类型非常相似。
空类型 {} 描述了一个对象,它本身没有属性。如果尝试访问此类对象的属性,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类型描述了所有对象上可用的功能。 - 空类型 
{}指的是一个本身没有属性的对象。