简述TypeScript中const和readonly的区别是什么?枚举和常量的区别?

const vs readonly

在TypeScript中,constreadonly都用于声明不可变的值,但它们的应用场景和用法有所不同。

const
  • const是用来定义常量的关键字,它可以在全局作用域、模块作用域或块作用域内使用。
  • 一旦被赋值,const声明的变量就不能再被重新赋值。
  • const用于变量声明。
const pi = 3.14;
pi = 3.14159; // 编译错误:不能给pi重新赋值
readonly
  • readonly是一个用在类的属性或接口的属性前的修饰符,表示该属性一旦被初始化之后就不能再被修改。
  • readonly属性必须在声明时或构造函数里被初始化。
  • readonly用于类或接口的属性。
class Circle {
    readonly pi = 3.14;
    constructor(public readonly radius: number) {}
}

let c = new Circle(10);
c.pi = 3.14159; // 编译错误:不能给pi重新赋值
c.radius = 20; // 编译错误:不能给radius重新赋值

枚举(Enums)vs 常量

枚举(Enums)
  • 枚举是TypeScript提供的一种特性,用于定义一组命名的常数。
  • 枚举通过enum关键字定义,可以为一组数值提供更友好的名字。
  • 枚举值默认从0开始自增,但你可以手动设置成员的值。
enum Color {
    Red,    // 0
    Green,  // 1
    Blue    // 2
}
let c: Color = Color.Green;
  • 枚举是在运行时真正存在的对象,可以反向映射从数值到枚举名。
常量
  • 常量可以是任何基本类型或用户定义的复杂类型的不可变的值。
  • 常量使用const关键字声明。
  • 常量在编译后的JavaScript代码中不会创建一个真实的对象或数组,它们的值在编译时就已经确定。
const pi = 3.14;
const maxNumber = Number.MAX_VALUE;

总结

  • const用于变量声明,其作用域可以是全局的、模块的或块级的,一旦赋值后不可更改。
  • readonly用于类和接口中的属性,一旦在构造函数内或声明时被赋值后不可更改。
  • 枚举(Enums)提供了一种为一组相关的值定义友好名称的方法,是在运行时存在的。
  • 常量是不可改变的值,可以是任何类型,其值在编译时已经确定。

发表评论

后才能评论