typescript 中不允许修改值的实现 - readonly/const

前言

日常积累,欢迎指正

ts 中不可变量的实现方法有两种

  • 1、使用 ES6 的 const 关键字声明的值类型
  • 2、引用类型中被 readonly 修饰的属性

示例如下

/** 1、 const 常量 */
const TEST: string = "test1";
TEST = "test2"; // Uncaught TypeError: Assignment to constant variable

/** 2、非 readonly 修饰的对象属性 name */
interface Iobj1 {
  name: string;
}

const obj1:Iobj1 = {
  name: "test1"
};
obj1.name = "test2"; // 修改成功

/** 3、readonly 修饰的对象属性 name */
interface Iobj2 {
  readonly name: string;
}

const obj2:Iobj2 = {
  name: "test1"
};
obj2.name = "test2"; // 报错 Cannot assign to 'name' because it is a read-only property.

是不是疑惑为什么明明说被 const 修饰的变量是不允许被修改的这里没有被 readonly 修饰的 obj1 的 name 属性还可以修改呢?

这是因为 对象等引用类型虽然属性值被修改了但因为它们是引用类型,引用地址并没有变,这个值(引用地址)还是和原来一样是‘没有’ 被修改过的

你可能感兴趣的:(前端)