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

Angular 13升级至14时LoadChildrenCallback类型不匹配问题求助

Angular 13升级到14后路由懒加载类型错误成因分析

你的路由懒加载配置代码如下:

loadChildren: () =>
      import(/* webpackChunkName: "apc" */ 'advanced-payments-control')
        .then((m) => m.AdvancedPaymentsControlModule)
        .catch((e) => {
          console.error(`failed to load 'advanced-payments-control' module`);
          if (!debug) {
            setTimeout(() => window.location.reload(), 1000);
          } else {
            console.error(e);
          }
        }),

运行时触发的类型错误:

Type '() => Promise<void | typeof AdvancedPaymentsControlModule>' is not assignable to type 'LoadChildrenCallback'.
  Type 'Promise<void | typeof AdvancedPaymentsControlModule>' is not assignable to type 'Type<any> | Routes | NgModuleFactory<any> | Observable<Type<any> | Routes> | Promise<Type<any> | Routes | NgModuleFactory<...>>'.
    Type 'Promise<void | typeof AdvancedPaymentsControlModule>' is not assignable to type 'Promise<Type<any> | Routes | NgModuleFactory<any>>'.
      Type 'void | typeof AdvancedPaymentsControlModule' is not assignable to type 'Type<any> | Routes | NgModuleFactory<any>'.
        Type 'void' is not assignable to type 'Type<any> | Routes | NgModuleFactory<any>'.

问题成因

  • Angular 14对LoadChildrenCallback的类型校验大幅收紧,要求懒加载返回的Promise必须最终解析为模块类型、路由配置数组或者NgModule工厂对象三者之一,不允许出现void类型的返回值。
  • 你的代码中,catch分支没有返回符合要求的有效值:catch块内的代码执行完毕后默认返回undefined(对应TypeScript中的void类型),导致整个Promise的返回类型变成了Promise<void | AdvancedPaymentsControlModule>,完全不符合Angular 14的类型约束,因此触发了这个类型错误。
  • 而Angular 13对该场景的类型校验较为宽松,没有强制要求返回值的类型,所以升级前不会出现这个错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 02:15:59