推荐答案
在 TypeScript 中,类的只读属性(Readonly Properties)是指在类中定义的属性,一旦初始化后就不能再被修改。只读属性通过在属性前添加 readonly 关键字来声明。
// www.javascriptcn.com code example
class Person {
readonly name: string;
constructor(name: string) {
this.name = name;
}
}
const person = new Person("Alice");
console.log(person.name); // 输出: Alice
person.name = "Bob"; // 错误: 无法分配到 "name" ,因为它是只读属性在上面的例子中,name 属性被声明为只读属性,因此在构造函数中初始化后,不能再对其进行修改。
本题详细解读
1. 只读属性的声明
只读属性通过在属性名前添加 readonly 关键字来声明。这意味着该属性只能在声明时或构造函数中被赋值,之后不能再被修改。
class Person {
readonly name: string;
}2. 只读属性的初始化
只读属性可以在声明时直接初始化,或者在构造函数中进行初始化。如果在声明时没有初始化,则必须在构造函数中进行初始化。
// www.javascriptcn.com code example
class Person {
readonly name: string = "Alice"; // 声明时初始化
}
class Person {
readonly name: string;
constructor(name: string) {
this.name = name; // 构造函数中初始化
}
}3. 只读属性的限制
一旦只读属性被初始化后,就不能再对其进行修改。尝试修改只读属性会导致编译错误。
// www.javascriptcn.com code example
class Person {
readonly name: string;
constructor(name: string) {
this.name = name;
}
changeName(newName: string) {
this.name = newName; // 错误: 无法分配到 "name" ,因为它是只读属性
}
}4. 只读属性与常量
只读属性与常量(const)有相似之处,但它们的应用场景不同。常量通常用于全局或模块级别的不可变值,而只读属性通常用于类实例中的不可变属性。
// www.javascriptcn.com code example
const PI = 3.14; // 常量
class Circle {
readonly radius: number;
constructor(radius: number) {
this.radius = radius;
}
}5. 只读属性的使用场景
只读属性通常用于表示那些在对象生命周期内不会改变的属性,例如对象的唯一标识符、创建时间等。
// www.javascriptcn.com code example
class User {
readonly id: number;
readonly createdAt: Date;
constructor(id: number) {
this.id = id;
this.createdAt = new Date();
}
}通过使用只读属性,可以确保这些属性在初始化后不会被意外修改,从而提高代码的安全性和可维护性。