首页 > 其他分享 >ts中interface转换class

ts中interface转换class

时间:2023-04-25 14:25:04浏览次数:31  
标签:转换成 ts Person JSON IPerson interface class

在 ts 中 interface 可以表示具体的一种数据结构,但当我们需要将 interface 转换成 class 时,直接使用 interface 的话,会导致一些问题,比如 interface 中的属性无法被继承,所以我们需要将 interface 转换成 class,这里介绍一种方法。

数据结构

interface IPerson {
  name: string;
  age: number;
}

class Person implements IPerson {
  name: string;
  age: number;
  getName(): string {
    return this.name;
  }
}

问题

当我们直接从网络获取到一份 json 的 string 时候,我们需要将其转换成对应的数据结构,这里我们使用JSON.parse来将其转换成Person,但是直接调用 getName 方法是会报错的,因为JSON.parse返回的是一个IPerson,而不是Person,所以我们需要将其转换成Person

//即使使用了类型断言,也是不行的
const person: Person = JSON.parse(jsonString);
person.getName(); // 报错

解决

我们可以使用Object.assign来将IPerson转换成Person

const person: IPerson = JSON.parse(jsonString);
const person2: Person = Object.assign(new Person(), person);
person2.getName(); // 正常

标签:转换成,ts,Person,JSON,IPerson,interface,class
From: https://www.cnblogs.com/maxkami/p/17352451.html

相关文章

  • Ubuntu 22.04.1 LTS 切换国内源
    1、备份原文件cp/etc/apt/sources.list/etc/apt/sources.list.bak 2、清空 sources.list文件中的内容,然后将以下任何一个源复制到文件中,以阿里源为例:vim/etc/apt/sources.listdebhttp://mirrors.aliyun.com/ubuntu/jammymainrestricteduniversemultiversed......
  • 实例解释BCELoss与BCEWithLogitsLoss的关联(二分类问题)
      BCEWithLogitsLoss=Sigmoid+BCELoss,      nn接口                       Function接口nn.BCELoss()                 F.binary_cross_entropy()nn.BCEWithLogitsLos......
  • 办公套件Microsoft Office LTSC 2021最新中文Mac版
    MicrosoftOfficeLTSC2021(office全家桶)中文版是Microsoft为Mac用户推出的一款新iPadMac系列电脑、iPad桌面应用程序。OfficeLTSC2021是MicrosoftOffice系列电脑、iPad电脑和桌面应用程序的新一代操作系统和办公自动化产品。它采用了Mac和Linux操作系统的同步版......
  • Ubuntu 22.04.1 LTS 编译安装 nginx-1.23.4
    一、安装环境依赖sudoapt-getinstallg++sudoapt-getinstallopenssllibssl-devsudoapt-getinstalllibpcre3libpcre3-devsudoapt-getinstallzlib1g-devsudoapt-getinstalllibgd-dev 二、下载安装包wgethttp://nginx.org/download/nginx-1.23.4.tar.gz......
  • Echarts4.0 迁徙图模拟Echarts2.0样式
     由于公司业务需求做Echarts4.0的迁徙图,但是Echarts4.0默认的迁徙图的飞行轨迹和迁徙线的颜色都是一样的,比较单调,现在模拟Echarts2.0的样式模拟了一个demo,虽然没有全部相同,但大体相近。备忘一下letminigrateChart=echarts.init(document.getElementById("MinigrateChart"));......
  • TStack_独立网络节点硬件更换指南
    目录问题背景操作范围适用版本影响范围操作时段操作步骤1.查找所有位于该节点的主路由ID2.切换所有主路由到其它网络节点3.路由切换验证4.关闭网络服务5.关机6.硬件更换7.开机并检查服务问题背景由于服务器硬件问题,需要对该独立的网络节点进行关机更换硬件操作,该网络节......
  • Nextmarkets被收购获得新生,CFI与约旦足球协会合作!
    在过去的一周内,国外外汇市场都发生了哪些引人注意的外汇新闻?以下是备受关注的外汇新闻,比如Nextmarkets被Apeiron收购获得新生、CFI成为约旦足球协会(JFA)的赞助商。具体新闻如下:1、Nextmarkets被Apeiron收购获得新生据天眼君了解,总部位于德国科隆的新经纪公司Nextmarkets目前已与Apei......
  • java中使用RedisTemplate读取数据异常 Missing type id when trying to resolve subt
    java中使用RedisTemplate读取数据异常Missingtypeidwhentryingtoresolvesubtypeof[simpletype,classjava.lang.Object]:missingtypeidproperty'@class'at[Source:(byte[])"报错:Causedby:com.fasterxml.jackson.databind.exc.InvalidTypeIdExcep......
  • Netstat 备忘清单_开发速查表分享
    Netstat备忘清单netstat命令是一个命令行工具,可以在Windows、Linux、MacOSX等操作系统中使用,它可以帮助用户查看本地主机的网络连接情况。它可以报告出本地主机的TCP/IP协议统计信息,包括活动的TCP连接,UDP端口,所有的接口信息,以及活动的网络连接等。netstat命令可以用来查看本......
  • 【代理设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介代理模式(ProxyPattern)是一种结构型设计模式,用一个类来代理另一个类或几个类的功能。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。延迟初始化(虚拟代理)。如果你有一个偶尔使用的重量级服务对象,一直保持该对象运行会消耗系统资源时,可使用代理模式。访问......