通过 HttpClient 传输具有 getter/setter 属性的对象

Transmit object with getter/setter property via HttpClient

提问人:Otto Abnormalverbraucher 提问时间:10/12/2023 更新时间:10/12/2023 访问量:25

问:

我有以下班级:

export class FileData {
  get name(): string { return this.#name || (this.data ? `Unnamed.${this.data.match(/[^:/]\w+(?=;|,|\+)/)?.[0]}` : '') }
  set name(name: string) { this.#name = name; }
  #name: string = '';

  public data: string;

  constructor(name: string, data: string) {
    this.name = name;
    this.data = data;
  }
}

我正在创建这个类的对象,然后我尝试通过 angular 的 http 将其提交给 mongoose api:

this.value = new FileData("xyz", "abc");
this._http.post<FileData>(targetUrl, this.value, { observe: 'response' })

我期望发生的是这样的请求有效负载:

{
  data: "abc",
  name: "xyz"
}

但是,有效负载中不存在 name 属性。我可以在dev-tools中访问该属性并查看文件名,但它不会在http请求中发送。我怎样才能让 angular 将这个 getter/setter 属性视为常规属性并将其包含在我的 http 有效负载中?

如果不是我将其定义为 的 #name,则有效负载将包含 data 属性旁边的私有属性_name,但也只包含我不想要的私有属性。private _name: string

角度 getter-setter angular-httpclient

评论

0赞 Andres2142 10/12/2023
有什么特殊原因需要实例化类型的对象而不是简单的接口吗?此外,为什么您不想在项目中使用?FileDataFileDataprivateTypescript
0赞 Otto Abnormalverbraucher 10/13/2023
@Andres2142 如您所见,我返回了一个占位符“文件名”,以防未知。我正在通过用户交互上传文件,最终必须实例化一个对象。如果我使用一个接口,我只需要进一步实例化它。我不介意在打字稿项目中使用 private。问题在于私有属性名称是 ,而不是 ,因为后者是 getter 和 setter。因此,当我传输对象时,我将传输一个带有私有属性的对象,而不是数据库期望的预期属性。_namename_namename
0赞 Otto Abnormalverbraucher 10/13/2023
@Andres2142 顺便说一句,这只是一个例子。我实际上并没有这样做。这个对象来自输入表单,但为了方便起见,不必包含大量其他组件、服务、模板,我只是选择将其编写为启动,因为它对问题没有区别。

答: 暂无答案