打字稿从json创建一个类
Posted
技术标签:
【中文标题】打字稿从json创建一个类【英文标题】:Typescript create a class from json 【发布时间】:2016-03-04 13:27:17 【问题描述】:我有一个接口 IPost 和一个类 Post,我想从 json 数据创建 Post,在 Post 构造函数中我得到接口 IPost 匹配的 json 响应.
我的意思是IPost界面是由这个很棒的工具json2ts生成的
json2ts : 从 JSON 生成 TypeScript 接口
import IPost, Title, Guid, Content, Excerpt, Embedded, Links from './Ipost.ts';
export class Post implements IPost
Id: number;
Date: string;
DateGmt: string;
Guid: Guid;
Modified: string;
ModifiedGmt: string;
Slug: string;
Type: string;
Link: string;
Title: Title;
Content: Content;
Excerpt: Excerpt;
Author: number;
FeaturedImage: number;
CommentStatus: string;
PingStatus: string;
Sticky: boolean;
Format: string;
Links: Links;
Embedded: Embedded;
constructor(json: any)
var self = this;
json.subscribe(res =>
var jsonRes: any = res.json();
self = jsonRes; //something like this
);
我可以直接将类Post
分配给json,因为json 被描述为与Post 类相同!
除了将每个属性从 json 分配给其对等方之外,还有其他方法吗?
【问题讨论】:
【参考方案1】:就像使用 javascript 一样,您必须使用标准循环遍历每个值,并将该值分配给 self。在您的情况下分配给 self,只需将 self
的值更改为 json
值,它不会对 this
本身进行任何更改。
json.subscribe(res =>
let json = res.json();
for (var prop in obj)
if( obj.hasOwnProperty( prop ) )
this[prop] = obj[prop];
);
注意:=>
将this
绑定到外部上下文(例如您正在使用的类)到this
,因此您不需要中间的self
变量。
【讨论】:
let obj = res.json()
而不是让 json
我的界面中有嵌套属性,比如post.embedded.title.rendered
,这对所有人都有效还是我应该为此创建嵌套的for循环?
如果那些嵌套的属性是其他类的实例,那么你就必须做不同的事了。以上是关于打字稿从json创建一个类的主要内容,如果未能解决你的问题,请参考以下文章