You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript用for循环push Promise对象报TS2345 never错误如何解决

报错原因

这个报错是TypeScript的类型推断逻辑导致的:
你初始化数组时直接写let issues = [],此时数组内没有任何元素,TS无法推断数组的元素类型,就会默认将其推断为never[]类型。never是TypeScript的底层类型,代表不可能存在的值,所以不允许你往never[]类型的数组里插入Promise<Issue>类型的元素,就抛出了类型不匹配的错误。
你之前手动初始化数组的时候,因为数组里已经有了createEntity返回的Promise<Issue>元素,TS能直接推断出数组类型是Promise<Issue>[],所以不会报错。

解决方法

方案1:最小改动原代码,手动声明数组类型

只需要给你初始化的issues数组加上显式的类型声明即可:

const seedIssues = (): Promise<Issue[]> => {
  // 手动声明数组类型
  let issues: Promise<Issue>[] = []
  for (let i = 0; i < 100; i++){
    issues.push(
      createEntity(Issue, {
        title: 'Case ' + String(i),
      })
    )
  }
  return Promise.all(issues);
};

方案2:用Array.from简化写法,无需手动管理循环变量

你可以用Array.from直接生成目标数组,不需要单独声明空数组再push,TS可以自动推断类型:

const seedIssues = (): Promise<Issue[]> => {
  return Promise.all(
    Array.from({ length: 100 }, (_, index) => 
      createEntity(Issue, { title: `Case ${index}` })
    )
  )
}

内容的提问来源于stack exchange,提问作者Kid_Learning_C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:21:02