Typescript 打字机脚本:";类型“中缺少属性getName”;将类型强制转换为json对象时
我使用这个类从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
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对象”这样的东西。是一些数据结构的文本表示形式代码>显示?