微信公众号
扫描关注微信公众号

TypeScript 中的 `readonly` 和 `const` 有什么区别?

原创 来源:博客站 阅读 0 03月17日 23:54 听全文 分类:Typescript系列

在 TypeScript 中,readonlyconst 都用于创建不可变的变量或属性,但它们的使用场景和行为有所不同。以下是它们的详细对比:

const

const 是 JavaScript 中的关键字,用于声明一个不可变的变量。const 声明的变量必须在声明时初始化,并且不能重新赋值。

示例

const PI = 3.14159;
PI = 3.14; // Error: Cannot assign to 'PI' because it is a constant or a read-only property.

特点

  • 块级作用域const 声明的变量具有块级作用域。
  • 不可重新赋值const 声明的变量不能重新赋值。
  • 必须初始化const 声明的变量必须在声明时初始化。

readonly

readonly 是 TypeScript 中的关键字,用于修饰类属性或接口属性,使其成为只读属性。readonly 修饰的属性只能在声明时或构造函数中初始化,之后不能修改。

示例

class Circle {
    readonly radius: number;

    constructor(radius: number) {
        this.radius = radius;
    }

    setRadius(newRadius: number) {
        this.radius = newRadius; // Error: Cannot assign to 'radius' because it is a read-only property.
    }
}

const circle = new Circle(5);
console.log(circle.radius); // 输出: 5
circle.radius = 10; // Error: Cannot assign to 'radius' because it is a read-only property.

特点

  • 类属性或接口属性readonly 用于修饰类属性或接口属性。
  • 不可重新赋值readonly 修饰的属性只能在声明时或构造函数中初始化,之后不能修改。
  • 可以在构造函数中初始化readonly 修饰的属性可以在构造函数中初始化。

readonlyconst 的区别

特性 const readonly
作用范围 变量 类属性或接口属性
作用域 块级作用域 类或接口的作用域
初始化 必须在声明时初始化 可以在声明时或构造函数中初始化
不可变性 变量不可重新赋值 属性不可重新赋值
使用场景 用于声明不可变的变量 用于声明不可变的类属性或接口属性

使用建议

  • 使用 const:当你需要声明一个不可变的变量时,使用 const。例如,用于声明常量值。
  • 使用 readonly:当你需要声明一个不可变的类属性或接口属性时,使用 readonly。例如,用于声明只读的对象属性。

示例对比

// 使用 const
const MAX_SIZE = 100;
MAX_SIZE = 200; // Error: Cannot assign to 'MAX_SIZE' because it is a constant or a read-only property.

// 使用 readonly
class Rectangle {
    readonly width: number;
    readonly height: number;

    constructor(width: number, height: number) {
        this.width = width;
        this.height = height;
    }

    setWidth(newWidth: number) {
        this.width = newWidth; // Error: Cannot assign to 'width' because it is a read-only property.
    }
}

const rect = new Rectangle(10, 20);
console.log(rect.width); // 输出: 10
rect.width = 15; // Error: Cannot assign to 'width' because it is a read-only property.

总结

constreadonly 都用于创建不可变的变量或属性,但它们的使用场景和行为有所不同。const 用于声明不可变的变量,具有块级作用域,必须在声明时初始化。readonly 用于声明不可变的类属性或接口属性,可以在声明时或构造函数中初始化。理解它们的区别和使用场景,可以帮助你编写出更安全、更易维护的代码。

- - - - - - - 剩余部分未读 - - - - - - -
扫描关注微信公众号获取验证码,阅读全文
你也可以查看我的公众号文章,阅读全文
你还可以登录,阅读全文
内容由AI生成仅供参考和学习交流,请勿使用于商业用途。
出处地址:http://www.07sucai.com/tech/701.html,如若转载请注明原文及出处。
版权声明:本文来源地址若非本站均为转载,若侵害到您的权利,请及时联系我们,我们会在第一时间进行处理。
>