TS中const和readonly的区别

在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. TSconstreadonly区别

    2024-04-28 18:02:03       12 阅读
  2. tsconstreadonly区别

    2024-04-28 18:02:03       14 阅读
  3. C#constreadonly关键字区别

    2024-04-28 18:02:03       18 阅读
  4. vue3reactive、readonlyshallowReactive

    2024-04-28 18:02:03       11 阅读
  5. tstypeinterface类型声明区别

    2024-04-28 18:02:03       42 阅读
  6. tsjs区别

    2024-04-28 18:02:03       13 阅读
  7. var、let const声明变量有什么区别

    2024-04-28 18:02:03       39 阅读
  8. var、let、const 区别

    2024-04-28 18:02:03       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-28 18:02:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-28 18:02:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-28 18:02:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-28 18:02:03       20 阅读

热门阅读

  1. vmware workstation 17 pro密钥最新大全

    2024-04-28 18:02:03       11 阅读
  2. Python 内置函数 float() 详解

    2024-04-28 18:02:03       13 阅读
  3. 大模型日报2024-04-27

    2024-04-28 18:02:03       9 阅读