前端/移动开发面试题更新 2026-08-05

在 TypeScript 中,给类的属性加上 readonly 修饰符会带来哪些约束和行为?

前端/移动开发技术原理TypeScript

考察说明

考查对 TypeScript 类中只读属性语义的理解。

回答思路

  1. 【回答框架 1】readonly 修饰符用于将类的实例属性标记为只读,它只能在属性声明时或构造函数中被赋值,赋值后该属性不可再被修改。
  2. 【回答框架 2】该修饰符是编译期约束,在运行时没有额外检查,如果通过类型断言(如 as any)绕过类型检查,仍可修改属性值。
  3. 【回答框架 3】与 const 不同,readonly 修饰的是属性,const 修饰的是变量;readonly 可在构造函数中赋值,const 必须在声明时初始化。
  4. 【回答框架 4】readonly 与访问修饰符(如 public、private、protected)以及 static 可组合使用,例如 public readonly id: number,它不影响属性的可见性。
  5. 【回答框架 5】如果声明 readonly 属性时未初始化,必须在构造函数中明确赋值,否则编译器会报错提示属性没有初始化。
  6. 【关键点 1】readonly 属性只能在声明或构造函数中赋值,之后不可变。
  7. 【关键点 2】它是编译期检查,运行时无额外保障,可通过类型断言绕过。
  8. 【关键点 3】readonly 与 const 区别:前者针对属性,后者针对变量,且 readonly 允许构造时赋值。
  9. 【易错点 1】不要将 readonly 视为运行时不可变的绝对保证,它仅限制直接赋值。
  10. 【易错点 2】在构造函数外的普通方法中给 readonly 属性赋值会编译报错。