【问题标题】:Prevent assigning to readonly property防止分配给只读属性
【发布时间】:2022-06-27 22:55:45
【问题描述】:

有没有办法使代码编译失败,如下例所示:

interface Ro {
    readonly x: string;
}

const modify = (rw: {x: string;}) => rw.x = 'bye';
const use = (v: Ro) => {
    console.log(v.x);

    //v.x = 'bye'; Compiler error: "Cannot assign to 'x' because it is a read-only property."
    modify(v);// No errors, not even warnings.
}
const ro: Ro = {x: "hi"}
use(ro);
console.log(ro.x);// readonly field has been changed!

【问题讨论】:

标签: typescript


【解决方案1】:

可能实现此目的的唯一方法是在整个对象上使用Object.freeze

【讨论】:

  • 您需要一个免责声明,或者您可以使用Object.freeze。这对编译没有帮助。
【解决方案2】:

not a way to fail the compilation currently。您可以选择做一些事情:

【讨论】:

    【解决方案3】:

    这里:

    const modify = (rw: {x: string;}) => rw.x = 'bye';
    

    您是在告诉 TypeScript 比应有的更宽松。如果您正确键入了参数const modify = (rw: Ro) => //...,它将正确地禁止修改。

    如果我们愿意,我们几乎可以总是绕过 TypeScript 保护和类型检查,通过编写诸如 myVariable as unknown as anyObject.defineProperty 之类的东西。这不是防弹的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 2019-12-06
      • 2020-02-17
      • 2020-04-08
      相关资源
      最近更新 更多