TypeScript 中如何使用 "readonly" 修饰符
在 TypeScript 中,我们可以使用 "readonly" 修饰符来定义只读属性。只读属性只能在初始化时被赋值,无法被修改。这在我们需要保证某些属性不被修改的时候非常有用。
什么是只读属性?
只读属性是指在对象初始化时被定义,并且在后续的使用中不能被修改的属性。只读属性通常用于定义一些常量,或者不希望被修改的配置项等。只读属性的值只能在初始化的时候赋值,一旦赋值后,就无法再次修改。
class Person { readonly name: string; constructor(name: string) { this.name = name; } }
在上面的代码中,我们定义了一个 Person 类,并且使用 "readonly" 修饰符定义了一个只读属性 name。这个属性只能在初始化时被赋值,无法被修改。
如何使用只读属性
在 TypeScript 中,我们可以使用 "readonly" 修饰符来定义只读属性。这个修饰符可以跟在属性名后面,表示这个属性是只读的。例如:
class Person { readonly name: string; constructor(name: string) { this.name = name; } }
在上面的例子中,我们定义了一个只读属性 name。这个属性只能在初始化时被定义,并且不能被修改。如果我们尝试在后面修改这个属性,TypeScript 编译器会报错,提示我们这个属性是只读的。
let person = new Person("张三"); person.name = "李四"; // Error: Cannot assign to 'name' because it is a read-only property.
只读属性 vs const 常量
在 TypeScript 中,我们还可以使用 const 关键字来定义常量。那么只读属性和 const 常量有什么区别呢?
首先,只读属性是定义在类中的,而 const 常量是定义在一个作用域中的。只读属性只能在初始化时被赋值,而 const 常量是在定义时被赋值。因此,只读属性的值可以在不同实例中不同,而 const 常量的值是整个作用域中唯一的。
-- -------------------- ---- ------- ----- -- - ----- ----- ------ - -------- --- ------ - ----- ------------- -- - --- -- - --- --------- --- -- - --- --------- ------------------- -- ---- ------------------- -- ---- ----- - -- -- ------ ------ ------ -- ---- ------- -- -- - --------- --------- -- - -- -- ------ ------ ------ -- ---- ------- -- -- - ---------
在上面的代码中,我们定义了一个 Circle 类和一个全局的 const 常量 PI。为了比较它们的区别,我们在 Circle 类中也定义了一个只读属性 PI。当我们创建两个 Circle 实例时,虽然它们的只读属性 PI 是相同的,但是它们实际上是两个不同的对象,因此这些属性的值是可以不同的。而全局的 const 常量 PI 的值是整个应用中唯一的,因此无法被修改。
总结
在 TypeScript 中,我们可以使用 "readonly" 修饰符来定义只读属性,只读属性只能在初始化时被赋值,不能被修改。只读属性适用于定义一些常量或者不希望被修改的配置项等场景。与 const 常量不同,只读属性是定义在类中的,可以有多个实例,每个实例的只读属性的值是可以不同的。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a4205448841e989408c9f2