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对象(只赋值部分属性),而且编译器不会报错。

阅读 19.5k
1 个回答
  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...
   
});

参考答案

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进