📜  const vs readonly ts - TypeScript (1)

📅  最后修改于: 2023-12-03 14:40:12.407000             🧑  作者: Mango

TypeScript中的const和readonly

在 TypeScript 中,constreadonly 都用于创建不可变的数据项。但是,它们之间有一些重要的区别。在本文中,我们将介绍这些区别以及使用它们的场景。

const

在 TypeScript 中使用 const 关键字来声明只读变量或常量。一旦给变量或常量赋值后,就不能再更改它了。如果您尝试更改一个 const 值,则会得到一个编译时错误。

const foo = 'bar';
foo = 'baz'; // Error! Cannot assign to 'foo' because it is a constant.

常量的类型推断和变量一样:

const foo = 42; // type: number
const bar = 'bar'; // type: string
readonly

与 const 不同,readonly 关键字可以用于类成员变量。readonly 变量可以在类构造函数中初始化,但一旦初始化后,它的值不能再更改。readonly 变量可以是构造函数参数的属性 或者类属性。和 const 不同,readonly 用于类成员变量,const 用于变量。

class Foo {
  readonly bar = 'bar';
  constructor() {
    // Can initialize readonly properties in constructor
    this.bar = 'baz';
  }
}

在上面的例子中,bar 属性首先在类中声明,并使用 readonly 关键字将其标记为只读。在构造函数中,bar 属性被初始化为 'baz',并且一旦初始化后,不能再更改。

const 和 readonly 区别:
  • readonly 可用于类成员变量,而 const 不可以。
  • const 用于变量,readonly 用于类成员变量。
  • const 值在声明时就必须要进行初始化,readonly 值可以在构造函数中初始化。
  • const 可以在函数作用域内声明,readonly 只能在类成员变量中声明。

总结:constreadonly 关键字看似相似,但在使用它们时需要注意区别。const一般用于表示逻辑上的常量、变量,readonly则一般用于表示为不可变的类属性。