打字稿:将类型转换为json对象时,“类型缺少属性getName”

时间:2019-08-09 20:21:41

标签: typescript

我有这个类,可用于将数据从json文件导入:

import Players from './players.json';

class Player {
  name: string;
}

const PLAYERS: Player[] = Players;

这很好用。但是,一旦我添加了这样的getter方法:

class Player {
  name: string;

  getName(): string {
    return this.name;
  }
}

然后我在const PLAYERS行上遇到了一个错误,因为Property 'getName' is missing in type。这是可以理解的:json对象没有getName属性,因此变得不兼容。我能想到的第一个解决方法是创建一个第二个类来包装第一个类,使用一个类导入json数据,并在第二个类上创建getter和其他方法。但这是一个非常棘手的解决方案。对于我不知道的问题,有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

您只需执行以下操作即可消除打字错误:

const PLAYERS: Player[] = Players as any;

但是,做PLAYERS[0].getName()会失败,所以这可能不是您想要的。

执行此操作的通常方法是分配给新类型。您的后端(或JSON文件)返回Player [],然后需要将其转换为新类型。可能很简单:

class PlayerModel {
    name: string;
    getName(): string {
        return this.name;
    }

    constructor(data: Player) {
        Object.assign(this, data);
        // any other stuff you need to do here
    }
}

那你要做:

const PLAYERS: PlayerModel[] = Players.map(p => new PlayerModel(p));

现在PLAYERS[0].getName()应该可以正常工作。