Skip to content

对象类型

除了 string , number , boolean 类型(又称基元类型)外,你将遇到的最常见的类型是对象类型。

这指的是任何带有属性的 JavaScript 值,几乎是所有属性!要定义对象类型,我们只需列出其属性及其类型。

例如,这是一个接受点状对象的函数:

typescript
// 参数的类型注释是对象类型 
function printCoord(pt: { x: number; y: number }) { 
  console.log("坐标的x值为: " + pt.x); 
  console.log("坐标的y值为: " + pt.y); 
}
printCoord({ x: 3, y: 7 });

在这里,我们使用具有两个属性的类型注释参数 - x 和 y - 这两个属性都是 number 类型。你可以使用 , 或 ; 来分隔属性,也可以不使用分隔符,但是每个属性之间需要换行,最后一个分隔符是可选的。 每个属性的类型部分也是可选的。如果你不指定类型,则将假定为 any 。

  • 可选属性 对象类型还可以指定其部分或全部属性是可选的。为此,请在属性名称后添加一个 ? :
typescript
function printName(obj: { first: string; last?: string }) { 
  // ... 
}
// 两种传递参数都可以 
printName({ first: "Felix" }); 
printName({ first: "Felix", last: "Lu" });

在 JavaScript 中,如果访问一个不存在的属性,将获得值 undefined 而不是运行时错误。因此,当你读取可选属性时,必须使用它之前用 undefined 进行检查。

typescript
function printName(obj: { first: string; last?: string }) { 
  // 错误 - 'obj.last' 可能不存在! 
  console.log(obj.last.toUpperCase()); 
  
  if (obj.last !== undefined) { 
    // 这样可以 
    console.log(obj.last.toUpperCase()); 
    }
    // 使用现代JavaScript语法的安全替代方案: 
    console.log(obj.last?.toUpperCase()); 
}