TS中const和readonly的区别

本文探讨了TypeScript中的const和readonly关键字,它们分别用于声明不可更改的变量和只读属性。const用于常量,其值不可变;readonly用于类和接口,确保实例属性在创建后保持不变,提升类型安全性。
摘要由CSDN通过智能技术生成

在TypeScript(TS)中,const 和 readonly 都是用于确保变量或属性不被重新赋值的工具,但它们的使用场景和语义有所不同。

  1. 作用域和生命周期
    • const 用于声明一个变量,并且这个变量的值在初始化后不能被重新赋值。它的作用域和生命周期取决于它被声明的位置。如果它在函数内部被声明,那么它的作用域就是该函数内部;如果它在全局作用域或模块作用域中声明,那么它的作用域就是整个文件或模块。
    • readonly 通常用于类属性或接口属性。它确保该属性在对象被创建后不能被修改。readonly 属性的作用域和生命周期与类的实例或接口的使用相关。
  2. 使用场景
    • const 主要用于声明常量,这些常量可以是基本类型(如数字、字符串、布尔值)、对象字面量、数组字面量等。一旦初始化,这些值就不能再被改变。
    • readonly 主要用于类属性,确保类的实例在创建后,这些属性的值不会被改变。它也可以用于接口,以表示接口的实现者必须提供一个只读属性。
  3. 语法和用途
    • const 声明一个不可变的变量绑定。它告诉TypeScript编译器该变量引用一个不能被重新赋值的值。
    • readonly 修饰类属性时,通常与类的构造函数一起使用,以确保在对象创建时初始化属性,并且在之后不被修改。它也可以用于接口,表示该属性在接口的实现中应该是只读的。
  4. 类型兼容性
    • 由于 const 变量不可重新赋值,它的类型在初始化后就固定了。尝试给 const 变量赋一个与初始类型不兼容的值会导致编译错误。
    • readonly 属性也具有固定的类型,但不同的是,它的类型由类的构造函数或接口定义决定。

示例:


	// 使用 const 声明一个常量 
	const myConstant: string = "Hello, World!"; 
	// myConstant = "Goodbye, World!"; // 编译错误,不能重新赋值 
	
	// 使用 readonly 在类中声明一个只读属性 
	class MyClass { 
	readonly myProperty: string; 
	constructor(value: string) { 
	this.myProperty = value; 
	// this.myProperty = "another value"; // 编译错误,不能在类的方法中修改 readonly 属性 
	} 
	} 
	
	// 使用 readonly 在接口中声明一个只读属性 
	interface MyInterface { 
	readonly interfaceProperty: string; 
	} 
	
	const myObject: MyInterface = { 
	interfaceProperty: "Interface Property Value" 
	}; 
	// myObject.interfaceProperty = "new value"; // 编译错误,不能修改接口实现的只读属性

总的来说,const 和 readonly 在TypeScript中都是用来实现不可变性的,但它们的用途和上下文有所不同。const 主要用于变量,而 readonly 主要用于类属性和接口属性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值