0

前言:我正在使用 typescript 和 node-pg (Postgres for 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));
4

1 回答 1

0

问题来自这一行:

let queryArray = [];

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

如果你把那行改成这样,告诉 TypeScript 虽然queryArray现在是空的,你只打算在里面放数字(例如 - 如果你的意思是它有另一种类型,那么当然要使用它),那么它应该修复问题,因为它将不再具有隐式any类型:

let queryArray: number[] = [];
于 2021-10-20T19:43:35.867 回答