gpt4 book ai didi

typescript - 如何更改 TypeScript 中的只读属性?

转载 作者:搜寻专家 更新时间:2023-10-30 20:35:30 25 4
gpt4 key购买 nike

我希望能够为我类(class)的用户创建readonly 属性(不是getter),但我需要在内部更新它们;有没有办法做到这一点并允许在内部进行更改? (并确保 TypeScript 阻止大多数更改值的尝试)

(在我的例子中,它是一个游戏引擎,getters/setters [一般功能] 是一个糟糕的选择)

最佳答案

您可以使用 improved mapped type modifiers从 typescript 2.8 开始。

例如,假设 UI 层(以及除持久层之外的所有其他层)只能获得域实体的 readonly 版本。持久层是一种特殊情况,因为它必须以某种方式知道如何将所有内部结构复制到数据库中。为此,我们不想每次都制作防御性副本,而只是为此目的使用 readonly typescript 修饰符。

您的readonly 实体将是:

class Immutable {
constructor(
public readonly myProp: string ) {}
}

实体的可变类型:

type Mutable = {
-readonly [K in keyof Immutable]: Immutable[K]
}

请注意特殊的 -readonly 语法来删除标志(也适用于可选值)。

在一个有限的地方(这里是持久层),我们可以将 Immutable 转换为 Mutable,方法是:

let imm = new Immutable("I'm save here")
imm.myProp = "nono doesnt work. and thats good" // error
let mut: Mutable = imm // you could also "hard" cast here: imm as unknown as Mutable
mut.myProp = "there we go" // imm.myProp value is "there we go"

希望对您有所帮助。

关于typescript - 如何更改 TypeScript 中的只读属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46634876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com