在TypeScript中,const
和readonly
是两种不同的属性修饰符,它们各自有特定的用途和语义。
const
关键字在TypeScript中用于声明常量,即一个值在初始化后不能再被改变的变量。这意味着一旦你为一个const
变量赋值,你就不能再次为它赋一个新的值。这是TypeScript(以及JavaScript)中的基本特性,用于确保某些值在程序的整个生命周期中保持不变。
例如:
typescript复制代码
const PI = 3.14159; |
// PI = 3.14; // 这会报错,因为PI是一个常量 |
readonly是TypeScript中的一个类型级别的修饰符,它用于对象的属性上,表示这个属性是只读的,即它的值在对象被创建后不能被改变。但是,这并不意味着包含只读属性的对象本身不能被重新赋值。这与
const不同,
const`是变量级别的修饰符,它确保变量的引用不能被改变。
例如:
typescript复制代码
interface Person { |
readonly name: string; |
age: number; |
} |
let person: Person = { |
name: "Alice", |
age: 25 |
}; |
// person.name = "Bob"; // 这会报错,因为name是只读的 |
person.age = 26; // 这是可以的,因为age不是只读的 |
person = { // 这是可以的,因为person变量本身不是const |
name: "Bob", |
age: 30 |
}; |
在这个例子中,Person
接口有一个只读属性name
和一个非只读属性age
。我们创建了一个Person
类型的变量person
,并尝试改变其name
属性,但TypeScript编译器会报错,因为name
是只读的。然而,我们可以改变age
属性的值,也可以重新为person
变量赋值一个新的Person
对象。
总的来说,const
和readonly
在TypeScript中各有其用,它们的主要区别在于const
用于确保变量的引用不变,而readonly
用于确保对象的特定属性不变。