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

如何解决Vuex中TypeScript的“并非所有代码路径都有返回值”错误?

解决Vuex迁移TypeScript时的「并非所有代码路径都有返回值」错误

问题根源分析

你碰到的ts(7030)错误,核心原因有三个:

  • axios.get的then回调里,仅在totalCount < 1时返回了值,其他分支没有明确返回逻辑,TS严格检查代码路径完整性,因此报错。
  • 原代码创建的Promise<string[]>没有调用resolve或reject,导致这个Promise永远处于pending状态,属于逻辑漏洞。
  • 用forEach处理数组后赋值给state变量是无效的,因为forEach始终返回undefined,无法生成你需要的数组结果。

修改后的代码(保留原有业务逻辑)

// 定义接口规范响应数据结构,替代any,提升TS类型安全性
interface FlightItem {
  depPlandTime: string;
  arrPlandTime: string;
  // 补充其他需要用到的属性
}

interface FlightResponse {
  data: {
    response: {
      body: {
        totalCount: number;
        items: {
          item: FlightItem[];
        };
      };
    };
  };
}

const arrayPromise: Promise<string[]> = new Promise<string[]>((resolve, reject) => {
  // 请求参数:depAirportId, arrAirportId, depPlandTime,可选airlineId
  axios.get<FlightResponse>(url)
    .then((res: FlightResponse) => {
      const { body } = res.data.response;
      this.state.totalCount = body.totalCount;

      if (this.state.totalCount < 1) {
        // 无票场景:resolve对应值并终止回调
        resolve(this.state.noTicket);
        return;
      }

      const flightItems = body.items.item;
      // 用map替代forEach,生成处理后的新数组赋值给state
      this.state.depTime = flightItems.map(obj => {
        obj.depTime = `${obj.depPlandTime}`.slice(-4, -2);
        return Object.values(obj);
      });
      this.state.depMin = flightItems.map(obj => {
        obj.depMin = `${obj.depPlandTime}`.slice(-2);
        return Object.values(obj);
      });
      this.state.arrTime = flightItems.map(obj => {
        obj.arrTime = `${obj.arrPlandTime}`.slice(-4, -2);
        return Object.values(obj);
      });
      this.state.arrMin = flightItems.map(obj => {
        obj.arrMin = `${obj.arrPlandTime}`.slice(-2);
        return Object.values(obj);
      });

      // 根据需求返回最终的string[]结果,示例为合并所有depTime值
      const result = this.state.depTime.flat() as string[];
      resolve(result);
    })
    .catch(err => {
      // 捕获请求错误,调用reject终止Promise
      reject(err);
    });
});

关键修改点

  1. 补全Promise生命周期:在所有代码路径中调用resolve(成功场景)或reject(失败场景),确保Promise能正常完成。
  2. 修复回调返回路径:每个分支都通过resolve+return明确终止回调,让TS检测到所有路径都有处理逻辑。
  3. 替换forEach为map:map会返回处理后的新数组,符合你给state变量赋值的需求,而forEach仅做遍历无返回值。
  4. 添加类型约束:定义FlightItem和FlightResponse接口,替代any,让TS能做类型检查,避免潜在的类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:36:19