具有默认值的Typescript类,如何将JSON解析为此

时间:2018-07-25 06:47:21

标签: json typescript

我有一个A类型的类。 此类具有几个属性,我们将它们称为prop1prop2prop3

当我调用API并返回代表对象的JSON字符串时,如果某些属性为null,则可能会省略。但是,在更远的地方,该对象用于动态构造表单(使用Formik,但这无关紧要)。 该框架期望所有属性都在那里,并且某些属性将根据其他属性动态可见。

所以我的问题是,如何解析自定义类的JSON响应,并保留默认值,以防API响应中省略属性?

我尝试过的是:

static getCustomer(id) {
        return fetch(process.env.MD_API_URL + 'customers/' + id, { mode: 'cors' })
            .then(response => {
                let cust = new Customer();
                return response.json().then(x => cust = JSON.parse(x));
        }).catch(error => {
            return error;
        });
    }

但这返回未定义。一定是做错了什么...

2 个答案:

答案 0 :(得分:1)

由于打字稿实际上并未编译,但已翻译为javascript,因此所有javascript规则都适用

因此,反序列化json实际上不会创建该类的新实例,但是会为您提供一个对象,您可以在设计时“调用” Customer

您可以创建一个对象,然后分配json值,如下所示:

export class Customer {

   public id: number;
   public name: string;

   // your stuff here
   public myDefaultProp: string = "default value";

   public constructor(init?: Partial<Customer>) {
      Object.assign(this, init);
   }
}

您的退货将如下所示:

return response.json().then(x => new Customer(JSON.parse(x)));

添加了一个示例https://stackblitz.com/edit/typescript-16wlmg

答案 1 :(得分:0)

本质上,这只是确定如何创建类实例并将JSON响应的属性映射到自定义类的事情,并且可以有很多解决方法,

但是我认为(Factory function)是适合此类任务的方法。