TypeScript 类的 readonly 修饰符有什么作用?

2024-08-26 15:48:59 507
在 TypeScript 中,`readonly` 修饰符用于定义只读属性,也就是说,这些属性一旦被初始化后,就不能再被修改。它可以用于类的属性、接口中的属性、或者类型中的属性。

readonly 修饰符的作用

  1. 限制修改:

    • 使用 readonly 修饰符的属性只能在声明时或在构造函数中初始化,一旦初始化后,任何尝试修改该属性的操作都会导致编译时错误。
  2. 提高代码安全性:

    • readonly 属性可以防止不小心或恶意地修改对象的某些关键属性,确保数据的不可变性。

示例 1: 在类中使用 readonly

class Person {
    readonly name: string;
    readonly age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }
}

const person = new Person("Alice", 30);

console.log(person.name); // 输出: Alice
console.log(person.age);  // 输出: 30

// 错误: 试图修改 readonly 属性
// person.name = "Bob"; 

解释:

  • Person 类中,nameage 属性使用了 readonly 修饰符,这意味着它们只能在构造函数中初始化,之后就不能再修改。
  • 尝试修改 person.nameperson.age 会导致编译错误,确保这些属性在对象的生命周期内保持不变。

示例 2: 在接口中使用 readonly

interface Point {
    readonly x: number;
    readonly y: number;
}

const point: Point = { x: 10, y: 20 };

console.log(point.x); // 输出: 10
console.log(point.y); // 输出: 20

// 错误: 试图修改 readonly 属性
// point.x = 30;

解释:

  • Point 接口中,xy 属性被声明为 readonly。这意味着一旦 point 对象被初始化,它的 xy 属性就不能被修改。
  • 尝试修改 point.x 会导致编译错误。

总结

  • readonly 修饰符用于防止对象属性在初始化后被修改,确保属性的不可变性。
  • 它可以在类、接口或类型中使用,帮助提高代码的安全性和可维护性。