TypeScript通过json格式创建对象

查看:90
本文介绍了TypeScript通过json格式创建对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

有这样的定义

class FruitProducer {
    fruits: Fruit[] = [];
}

this.fruits[index] = {
    alive: true,
    x: this.position[aneId].x,
    y: this.canvas.canvas.height - this.position[aneId].y,
    size: 0,
    type: Math.random() < 0.1 ? FruitType.Blue : FruitType.Orange,
    speed: Math.random() * 0.040 + 0.010
};

Fruit中有方法,但我只想通过Json方式赋值一部分数据,但是编译器一直提醒我漏了赋值方法。

问,如何通过写json的方式创建Fruit对象(只赋值部分属性),而且编译器不会报错。

解决方案

  1. 你申明了fruits:Fruit,那么必须传入Fruit 我不知道你的Fruit是否是interface

  2. JavaScript或者Typescript里面,那玩意应该叫Object

  3. 如果你希望使用JSON初始化,你可以在Fruit构造函数这么写

如果 Fruitinterface

interface Fruit {
    a:string;
}
// 强制转换
this.fruits[index] = <Fruit> {a: 'aaa'};

如果 Fruitclass

也可以强制转换,但是这样会导致 无法调用其函数

不推荐

class Fruit {
    a:string;
}
this.fruits[index] = <Fruit> {a: 'aaa'};

正确的用法是使用构造函数

function deserialize(json, instance) {
    for(var prop in json) {
        if(!json.hasOwnProperty(prop))
            continue;
        if(typeof json[prop] === 'object')
            deserialize(json[prop], instance[prop]);
        else
            instance[prop] = json[prop];
    }
}

class Fruit {
  constructor(json: Object){
      deserialize(json, this);
  }
}

this.fruits[index] = new Fruit({
   
    ...your object data...
   
});

参考答案

这篇关于TypeScript通过json格式创建对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆