【问题标题】:Passing const variables to functions in TypeScript将 const 变量传递给 TypeScript 中的函数
【发布时间】: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


【解决方案1】:

您正在将函数参数 sum 重新分配给您的新对象。您不能将 const 放在函数参数中。

您正在寻找的是 eslint 或类似的东西。一种在您的项目中强制执行最佳原则的工具。

您要查找的规则是no param reassign

【讨论】:

  • 这正是我想要的。谢谢。
猜你喜欢
  • 2021-06-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
  • 2019-01-19
相关资源
最近更新 更多