【发布时间】:2021-02-02 14:34:27
【问题描述】:
我正在尝试使用 React 中的 TypeScript 将字符串类型分配给“播放器”,但它不能像选项 1 中那样简单地使用 player: string。
选项 1:
Object.values(data.val()).forEach((player: string) => {
newPlayers.push(player);
});
上述方式产生一个ts err:
'(player: string) => null' 类型的参数不能分配给'(value: unknown, index: number, array: unknown[]) => null' 类型的参数。 参数 'player' 和 'value' 的类型不兼容。 类型 'unknown' 不可分配给类型 'string'.ts(2345)
但使用 as 语法,如下所示,可以更正它。这是为什么呢?
选项 2:
DB_players.once('value', (data) => {
// Fetch players who signed up
const newPlayers: string[] = [];
if (data.val() ) {
Object.values(data.val()).forEach((player) => {
newPlayers.push(player as string);
});
setPlayers(newPlayers); // save the new player list
}
});
【问题讨论】:
-
没有多大意义。如果循环的主要目的是将项目推送到外部数组,为什么要使用 map?还要记住
player类型是继承的,前提是您输入了data.val()。 -
我正在使用 map 循环遍历一个对象(来自 Firebase)以仅获取值并将它们推送到
newPlayers。然后使用newPlayers更新状态。 -
如果您没有返回任何内容,您应该始终使用
forEach在此循环之前newPlayers中是否已经有任何数据?如果不是,那么newPlayers应该是从这个map创建的数组。但主要问题是data.val()的类型是unknown[],所以修复它。
标签: reactjs typescript types