gpt4 book ai didi

javascript - 将 JSON String/JS 对象映射到具有私有(private)属性的 Typescript 类

转载 作者:行者123 更新时间:2023-11-30 11:12:25 24 4
gpt4 key购买 nike

这是一个带有公开但不可编辑属性的 typescript 类:

export class Category {

private _id: number;

constructor(id: number){
this._id = id;
}

public get id(){
return this._id;
}

}

我想从这样的 JSON 映射它:

{ id: 1 }

这里有一些明显的问题:

  • 我知道“_id”不能神奇地映射到“id”,所以也许我可以实现一个自定义逻辑,在名称前用 _ 重命名所有属性
  • 我想保留带有 id 参数的构造函数,但也许我无法在实例化之前映射需要参数的对象
  • 使用空构造函数,我尝试了 Object.assign(new Category(), jsonObject) , 但是,这不起作用,因为 Cannot set property id of #<Category> which has only a getter

我想避免的是为每个像这样具有私有(private)属性的类编写自定义映射逻辑,我尝试了一些其他解决方案和库,但对我的情况不起作用,它们都引用仅具有公共(public)属性的类

我什至不知道我的要求是否可以实现,所以如果不是,那么我将“投降”以使用仅具有公共(public)属性的类

最佳答案

这里的误解是您根本需要一个 getter/setter 来管理可见性。无论您做什么,都无法阻止代码访问和修改 id。但是,您可以告诉 IDE(以及使用它的开发人员)他只能使用 readonly 修饰符读取/获取该属性,这将您的代码简化为:

 export class Category {
readonly id: number;
}

请注意,readonly 只存在于编译时,对运行时没有任何影响。您的 IDE 会阻止您执行以下操作:

 (new Category).id = 5;

但它可以让你轻松做到:

 const category = Object.assign(new Category, { id: 5 });

关于javascript - 将 JSON String/JS 对象映射到具有私有(private)属性的 Typescript 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53155196/

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