【问题标题】:TypeScript construct class with json带有 json 的 TypeScript 构造类
【发布时间】:2016-04-28 20:36:46
【问题描述】:

我正在使用 Angular2/Typescript 构建一个示例项目,以便将其用作现有后端代码的新前端。

我真的很喜欢创建类型的能力,并考虑使用后端提供的一些 JSON 对象作为类型化类,如下所示:

module DomainObjects {
  export class SomeDomainObject {
    constructor(attr1:string, attr2:number) {...}
    ...
  }
}

后端返回的一些 JSON 代码非常大,所以我不想在构造函数中使用大量参数。充其量我只是将一个 JSON 对象作为单个参数传递给进行一些检查(或不检查)的构造函数。另一方面,我想直接访问 JSON 对象。这样的事情可能吗:

myobject:SomeDomainObject;
...
this.myobject = new SomeDomainObject({id:10,color:'green'});

并在这样的模板中访问 myobject

{{myobject.color}}

没有像 {{myobject.json.color}} 这样的其他引用

【问题讨论】:

    标签: class constructor typescript angular


    【解决方案1】:

    您可以使用接口(而不是类)对 JSON 数据进行建模。然后您可以简单地将接收到的 JSON 分配给它(而不是调用构造函数)。

    对于验证,您很可能需要构建一个验证函数来检查接收到的 JSON 结构是否真的等于您在界面中描述的类型。您还可以使用类似的签名构建验证和分配函数

    function toTypedData(input: any):SomeDomainObject { ... }
    

    您还可以使用 JSON 架构和合适的验证库来执行该步骤。

    【讨论】:

    • 谢谢。我认为这几乎可以解决问题。来自 Java 世界,我对接口的用途略有不同。
    • @user3802631 使用接口的唯一问题是,如果您的 JSON 表示具有方法的对象(例如:如果您的 SomeDomainObject 有方法),那么这些方法将不存在于您的对象上认为它们存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多