【发布时间】:2019-11-12 14:52:58
【问题描述】:
我正在学习TypeScript,我对它处理const 变量的方式有点困惑。假设我将一个数字的接口定义为:
interface MyNumber {
value: number;
}
并创建了一个常量MyNumber
const myNumber: MyNumber = { value: 42 };
我在TypeScript documentation 中读到const 并没有阻止我修改对象的内部状态(前提是属性不是readonly)。但是,我没想到会编译:
function setToFive(num: MyNumber) {
num = {
value: 5
}
}
console.log(myNumber);
setToFive(myNumber);
console.log(myNumber);
此代码打印两次42。看起来该函数执行了我的 const 变量的副本,并在其范围内使用该副本。我觉得这有点令人惊讶。有没有办法改为触发compile-time 错误?
【问题讨论】:
-
您可以将值字段标记为只读。这为您提供了更多防止意外分配的保护。
-
Const 声明并不像它应该的那样不可变。如果变量包含高级类型( Object ),您仍然可以更改它的属性。好吧,如果你真的想实现不变性,你必须使用 Object.freeze()
标签: typescript constants