我从对REST服务器的AJAX调用接收到一个JSON对象。这个对象的属性名与我的TypeScript类(这是this question的后续类)相匹配。
初始化它的最佳方式是什么?我认为this不会工作,因为类(& JSON object)的成员是对象列表,成员是类,而这些类的成员是列表和/或类。
但我更喜欢这样一种方法,即查找成员名称并将它们分配给其他成员,根据需要创建列表和实例化类,这样我就不必为每个类中的每个成员编写显式代码(有很多!)
发布于 2016-09-10 15:10:49
你可以使用Typescript我不知道这是什么时候添加的,我现在使用的是Typescript 2.0.2,这似乎是一个ES6特性。
client.fetch( '' ).then( response => {
return response.json();
} ).then( json => {
let hal : HalJson = Object.assign( new HalJson(), json );
log.debug( "json", hal );
这是HalJson
export class HalJson {
_links: HalLinks;
}
export class HalLinks implements Links {
}
export interface Links {
readonly [text: string]: Link;
}
export interface Link {
readonly href: URL;
}
下面是chrome所说的
HalJson {_links: Object}
_links
:
Object
public
:
Object
href
:
"http://localhost:9000/v0/public
所以你可以看到它不是递归赋值的
发布于 2017-09-09 09:14:12
我已经创建了一个工具来生成TypeScript接口和一个运行时“类型映射”,用于根据JSON.parse
:ts.quicktype.io的结果执行运行时类型检查
例如,给定以下JSON:
{
"name": "David",
"pets": [
{
"name": "Smoochie",
"species": "rhino"
}
]
}
quicktype生成以下TypeScript接口和类型映射:
export interface Person {
name: string;
pets: Pet[];
}
export interface Pet {
name: string;
species: string;
}
const typeMap: any = {
Person: {
name: "string",
pets: array(object("Pet")),
},
Pet: {
name: "string",
species: "string",
},
};
然后我们根据类型映射检查JSON.parse
的结果:
export function fromJson(json: string): Person {
return cast(JSON.parse(json), object("Person"));
}
我遗漏了一些代码,但您可以尝试使用quicktype查看详细信息。
发布于 2018-11-29 03:52:10
对于简单的对象,我喜欢这个方法:
class Person {
constructor(
public id: String,
public name: String,
public title: String) {};
static deserialize(input:any): Person {
return new Person(input.id, input.name, input.title);
}
}
var person = Person.deserialize({id: 'P123', name: 'Bob', title: 'Mr'});
利用在构造函数中定义属性的功能可以使其简洁。
这将为您提供一个类型化的对象(与使用Object.assign或某些变体的所有答案相比,这将为您提供一个对象),并且不需要外部库或装饰器。
https://stackoverflow.com/questions/22885995
复制相似问题