第4章:对象与接口
可选属性与只读属性
可选属性(Optional Properties)
在 TypeScript 中,接口的属性可以通过添加 ? 标记为可选属性。这意味着该属性可以存在,也可以不存在,而不会引发类型错误。
语法示例:
interface User {
name: string;
age?: number; // 可选属性
}
const user1: User = { name: "Alice" }; // 合法,age 可省略
const user2: User = { name: "Bob", age: 30 }; // 合法
应用场景:
- 处理动态数据(如 API 返回的字段可能缺失)。
- 实现灵活的配置对象。
注意事项:
- 访问可选属性时需检查是否存在,避免运行时错误:
if (user1.age !== undefined) { console.log(user1.age.toFixed(2)); }
只读属性(Readonly Properties)
通过 readonly 修饰符可以将属性标记为只读,禁止在初始化后重新赋值。
语法示例:
interface Point {
readonly x: number;
readonly y: number;
}
const p: Point = { x: 10, y: 20 };
p.x = 5; // 编译错误:无法分配到 "x",因为它是只读属性
应用场景:
- 定义不可变的数据结构(如配置、常量)。
- 与
const声明结合使用,确保引用和属性均不可变。
扩展知识:
- 只读数组:
ReadonlyArray<T>类型禁止修改数组内容:const nums: ReadonlyArray<number> = [1, 2, 3]; nums.push(4); // 编译错误:push 方法不存在
可选与只读的联合使用
可以同时为属性添加 readonly 和 ?,表示该属性可省略且一旦赋值不可更改。
示例:
interface Config {
readonly id?: string;
timeout: number;
}
const config: Config = { timeout: 1000 };
config.id = "abc"; // 编译错误(如果 id 已赋值则不可修改)
总结表格
| 特性 | 语法 | 用途 | 注意事项 |
|---|---|---|---|
| 可选属性 | property?: type | 允许属性缺失 | 需运行时检查是否存在 |
| 只读属性 | readonly property: type | 防止属性被重新赋值 | 仅限制编译时,运行时仍可修改(需配合工具) |
