Appearance
对象类型
除了 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());
}