为什么一种循环样式给我一个错误,而另一个没有?



前言:我使用typescript和node pg(Postgres表示node)来填充一个promise数组,然后使用Promise.all()执行它们。

当在一个数字数组上迭代并将查询推入数组时,如果我使用以下代码在数字数组上循环,我会得到一个错误:

const gameIds = [1,2,3,4,5];
let queryArray = [];
const sql = 'select bettor, fader from wagers where game_id=$1';
gameIds.forEach((gameId: number)=> {
// populate the query array
queryArray.push(DatabaseOperations.dbConnection.query(sql, [gameId]));
});
let allWagersForGames = await Promise.all(queryArray);

当将promise数组的结果分配给allWagersForGames时,此代码给我一个错误。错误状态为:Variable 'queryArray' implicitly has an 'any[]' type.ts(7005)

但是,当我以以下方式迭代数字数组时,不会出现错误,我也不知道为什么。我不明白为什么迭代风格的改变会影响是否出现以前的错误:

const gameIds = [1,2,3,4,5];
const sql = 'select bettor, fader from wagers where game_id=$1';
for (const gameId of gameIds) {
// populate the query array
queryArray.push(DatabaseOperations.dbConnection.query(sql, [gameId]));
}
// now retrieve all of the data
let allWagersForGames = (await Promise.all(queryArray));

问题来自这一行:

let queryArray = [];

TypeScript会将queryArray的类型推断为any[],因为您没有使用任何可用于推断整个数组类型的类型化元素对其进行初始化。默认情况下,TypeScript配置为不允许隐式any类型,因此这会导致编译失败。

如果你把这一行改成这样,告诉TypeScript,虽然queryArray现在是空的,但你只想在里面放数字(例如,如果你想让它有另一个类型,那么当然要用它),那么它应该解决这个问题,因为它将不再有隐式的any类型:

let queryArray: number[] = [];

相关内容

最新更新