我有一个A
类型的类。
此类具有几个属性,我们将它们称为prop1
,prop2
和prop3
。
当我调用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;
});
}
但这返回未定义。一定是做错了什么...
答案 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)));
答案 1 :(得分:0)
本质上,这只是确定如何创建类实例并将JSON响应的属性映射到自定义类的事情,并且可以有很多解决方法,
但是我认为(Factory function)是适合此类任务的方法。