我有这个类,可用于将数据从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和其他方法。但这是一个非常棘手的解决方案。对于我不知道的问题,有更好的解决方案吗?
答案 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()
应该可以正常工作。