Typescript 打字机脚本:";类型“中缺少属性getName”;将类型强制转换为json对象时

Typescript 打字机脚本:";类型“中缺少属性getName”;将类型强制转换为json对象时,typescript,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; } } 然后我在constplay

我使用这个类从json文件导入数据:

import Players from './players.json';

class Player {
  name: string;
}

const PLAYERS: Player[] = Players;
这个很好用。但一旦我添加了这样的getter方法:

class Player {
  name: string;

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

然后我在
constplayers
行上得到一个错误,因为
属性“getName”在type
中丢失。这是可以理解的:json对象没有getName属性,因此变得不兼容。我能想到的第一个解决方法是创建第二个类来封装第一个类,使用一个类来导入json数据,并在第二个类上创建getter和其他方法。但这是一个非常棘手的解决方案。对于这个我不知道的问题,有没有更好更优雅的解决方案?

您只需执行以下操作,就可以消除typescript错误:

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()
应该可以正常工作了。

没有像“JSON对象”这样的东西。是一些数据结构的文本表示形式显示?