打字稿从json创建一个类

     2023-03-13     123

关键词:

【中文标题】打字稿从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循环? 如果那些嵌套的属性是其他类的实例,那么你就必须做不同的事了。

打字稿从对象中选择ID [重复]

】打字稿从对象中选择ID[重复]【英文标题】:TypescriptSelectIdsfromobject[duplicate]【发布时间】:2017-05-0300:38:12【问题描述】:我是Typescript的新手。我想从observable中选择ids这是我观察到的letmyObj=["id":1,"text":"Mary","id":2,"text":"Nancy","id":3... 查看详情

打字稿从元组/数组值派生联合类型

】打字稿从元组/数组值派生联合类型【英文标题】:Typescriptderiveuniontypefromtuple/arrayvalues【发布时间】:2017-12-2807:58:14【问题描述】:说我有清单constlist=[\'a\',\'b\',\'c\']是否可以从\'a\'|\'b\'|\'c\'这个值联合类型派生?我想要这个是... 查看详情

创建一个返回反应组件类的打字稿函数

】创建一个返回反应组件类的打字稿函数【英文标题】:Createatypescriptfunctionreturningreactcomponentclass【发布时间】:2020-06-0319:17:55【问题描述】:我需要创建一个实用函数,它将根据某些条件返回一个反应组件类(而不是实例)。... 查看详情

在角度/打字稿中将类创建为可迭代

】在角度/打字稿中将类创建为可迭代【英文标题】:creatingclassasIterableinangular/typescript【发布时间】:2019-01-3021:30:18【问题描述】:我已经在Angular中创建了一个类,现在当我通过商店订阅获取对象时,虽然它返回一个对象数组,... 查看详情

打字稿类嵌套json猫

】打字稿类嵌套json猫【英文标题】:Typescriptclassnestedjsoncat【发布时间】:2018-06-2512:52:33【问题描述】:您好,我有嵌套的json尝试转换类,但我弄错了。类:exportclassLocationaddress:Stringcity:Stringcountry:Stringposition:lat:String,lng:String,mark... 查看详情

从类创建派生类型,但省略构造函数(打字稿)

】从类创建派生类型,但省略构造函数(打字稿)【英文标题】:Createaderivedtypefromclass,butomittheconstructor(typescript)【发布时间】:2020-02-2201:08:49【问题描述】:我有一个这样定义的接口和类:interfaceFooconstructor:typeofFoo;classFoostaticba... 查看详情

打字稿:通过传入命名参数的构造函数创建类?

】打字稿:通过传入命名参数的构造函数创建类?【英文标题】:Typescript:Createclassviaconstructorpassinginnamedparameters?【发布时间】:2018-01-1210:18:11【问题描述】:我有一个类,其中定义了带有3个参数的构造函数,这些参数都是可选... 查看详情

如何创建一个从打字稿中的类中提取所有方法的类型?

】如何创建一个从打字稿中的类中提取所有方法的类型?【英文标题】:Howtocreateatypethatextractallmethodsfromaclassintypescript?【发布时间】:2022-01-2209:55:57【问题描述】:假设我有一堂课FooclassFoobar()//anythingbaz()//anything我如何创建一个... 查看详情

找不到名称“JSON”打字稿文件

】找不到名称“JSON”打字稿文件【英文标题】:Cannotfindname\'JSON\'typescriptfile【发布时间】:2020-06-2503:12:45【问题描述】:我创建了一个Angular应用程序,我在其中执行JSON转换功能,例如JSON.stringify、JSON.parse我收到错误,例如找不... 查看详情

在打字稿Angular 5中导入json文件

】在打字稿Angular5中导入json文件【英文标题】:ImportjsonfileintypescriptAngular5【发布时间】:2019-01-0314:31:35【问题描述】:我正在尝试像这样在typescript类中导入json文件import*asnationalitiesfrom\'./mock/nationalities.json\';它给了我一个错误找... 查看详情

打字稿,序列化类对象

】打字稿,序列化类对象【英文标题】:Typescript,serializeclassobjects【发布时间】:2015-05-2616:17:07【问题描述】:如何将这些类序列化为JSON?从下面的示例中可以看出,JSON.stringify()不会序列化Cache_Backend_LocalStorage_TagThree对象内的Cac... 查看详情

打字稿:将 JSON 对象转换为类/接口对象

】打字稿:将JSON对象转换为类/接口对象【英文标题】:Typescript:ConvertJSONobjecttoaclass/interfaceobject【发布时间】:2018-10-1003:47:06【问题描述】:我正在尝试将API响应转换为typescript类/接口。这里API返回一个包含一些属性的对象列表... 查看详情

打字稿:使用具有不同类型的同一类

】打字稿:使用具有不同类型的同一类【英文标题】:Typescript:usethesameclasswithdifferenttypes【发布时间】:2018-11-0309:34:54【问题描述】:在定义类和使用的每个对象的类型时,我真的很喜欢Typescript的严格性,但我最近遇到了一些我... 查看详情

在Angular8中将HTTP响应json转换为打字稿对象

】在Angular8中将HTTP响应json转换为打字稿对象【英文标题】:ConvertingHTTPresponsejsonintotypescriptObjectinAngular8【发布时间】:2019-11-0419:51:47【问题描述】:我正在尝试从angular8中的HTTP响应创建一个打字稿对象,但我收到一个错误:错误... 查看详情

使用打字稿在构造函数中动态设置类属性

】使用打字稿在构造函数中动态设置类属性【英文标题】:Usetypescripttodynamicallysetclasspropertyinconstructor【发布时间】:2021-12-3105:36:31【问题描述】:我正在尝试创建一个打字稿类MyClass,并在构造函数中动态设置实例属性:constmyIns... 查看详情

打字稿可变泛型类,接受扩展公共基础的可变数量的类对象?

】打字稿可变泛型类,接受扩展公共基础的可变数量的类对象?【英文标题】:Typescriptvariadicgenericclass,acceptingavariablenumberofclassobjectswhichextendacommonbase?【发布时间】:2021-09-2611:14:18【问题描述】:我正在尝试在typescript中设计一个... 查看详情

如何使用 Alamofire 和 SwiftyJSON 正确创建一个类来保存来自 JSON 的数据

】如何使用Alamofire和SwiftyJSON正确创建一个类来保存来自JSON的数据【英文标题】:HowtoproperlycreateaclasstoholddatafromJSONwithAlamofireandSwiftyJSON【发布时间】:2016-06-1620:15:44【问题描述】:我正在尝试创建一个类来保存以JSON形式发送的来... 查看详情

打字稿和多个类

】打字稿和多个类【英文标题】:Typescriptandmultipleclasses【发布时间】:2017-08-1903:29:49【问题描述】:我有一个组件类EventSchedulePage。它扩展了HandleStorageServiceabstract类,如下所示。你可以看到这个子类上有一个名为showInvalidTokenAler... 查看详情