TypeScript:static readonly静态常量

介绍

static readonly 是一个非常常见且强大的组合,用于定义类级别的常量。它结合了 static 和 readonly 两个关键字的优点,是创建不可变、共享配置和常量的推荐方式。

注意:只能修饰类属性,不能修饰变量,否则报错

含义

关键字 作用
static 表示该成员属于类本身,而不是类的实例。通过 ClassName.member 访问。
readonly 表示该成员是只读的,一旦被赋值就不能再修改(编译时检查)。

组合起来就是:不可改变的静态属性

应用场景

集中管理:将相关的常量组织在一个类中,便于查找和维护。
命名空间:避免全局命名污染。例如 MathConstants.PI 比全局的 PI 更清晰。
类型安全:可以进行类型检查,防止赋值错误。
不可变性:readonly 确保常量不会被意外修改,提高代码可靠性。
易于测试和替换:所有配置集中,方便在不同环境(开发/生产)下替换。

基本用法

class MathUtils {
  // ✅ 定义数学常量
  static readonly PI: number = 3.1415926
}

访问

直接通过 类名.静态属性名 访问:

console.log(MathUtils.PI)
console.log(MathUtils.E)

修改报错

MathUtils.PI = 3.14

对象常量

注意:只读的是引用

班主任类:

class Teacher {

  name:string = ""
  sex:string = ""

  constructor(name:string,sex:string){
    this.name = name
    this.sex = sex
  }
}

班级类:

class Clazz{

  static readonly wang:Teacher = new Teacher("王老师","男")
}

访问:

// ✅ 合法:读取
console.log("班主任名字:",Clazz.wang.name)

修改 static readonly 对象中的属性值:

// ✅ 合法:修改对象内部的属性
Clazz.wang.age = 31 // 没有编译错误!

与 const 的对比

场景 推荐方式 示例
在函数或块级作用域中定义常量 使用 const const MAX_USERS = 100;
在类中定义属于类的常量 使用 static readonly static readonly MAX_USERS = 100;
定义枚举风格的常量集 使用 const enum 或 static readonly 类 见下方示例

总结

  • static readonly 定义类级别常量的标准方式。
  • 提供了集中管理、命名空间、类型安全和不可变性。
  • 适用于配置等场景。
  • 在开发中,强烈建议使用 static readonly 类来组织应用常量,而不是散落在各处的 const 变量。

原文出处:/show_1GW21uvI6UQ0.html