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

SAPUI5调用UIComponent.getRouterFor报any类型返回TS错误

SAPUI5 TypeScript项目"Unsafe return of an 'any' typed value"报错排查

@typescript-eslint/no-unsafe-return规则触发的判断逻辑非常明确:函数任意返回路径上存在被TypeScript推导为any类型的值时就会抛错,和你有没有给函数内其他变量标注类型没有直接关系。结合你提到的调用UIComponent.getRouterFor的场景,问题基本出在以下两个方向:

1. 所用版本的@sapui5/ts-types-esm类型声明存在缺陷

1.112以前的@sapui5/ts-types-esm包中,UIComponent.getRouterFor方法的返回值确实被错误标注为any,没有绑定正确的Router类型。哪怕你手动给接收返回值的变量标注了Router类型,只要直接return该方法的调用结果,TS依然会识别到原始调用的返回值是any,触发ESLint报错。

  • 验证方法:将鼠标悬停在代码中UIComponent.getRouterFor()的调用位置,查看TS弹出的类型提示,如果显示返回值为any,即可确认是类型包本身的问题,和你的业务代码写法无关。
  • 修复方案:
    • 优先将@sapui5/ts-types-esm升级到与你项目SAPUI5运行时版本匹配的最新补丁版本,1.112及以上版本已经修正了该方法的类型定义,会正确返回sap/ui/core/routing/Router类型实例。
    • 受项目限制暂时无法升级类型包时,可以在调用处增加类型断言做临时修复,示例写法:
      import Router from "sap/ui/core/routing/Router";
      // 其余代码省略
      return UIComponent.getRouterFor(this) as Router;
      

2. 方法内this上下文未标注正确类型

在Controller中封装获取Router的工具方法时,很多开发者只会给方法返回值标注Router类型,忽略了给方法内的this绑定正确的Controller类型,会导致TS推导getRouterFor入参类型时匹配失败,fallback到any类型推导,连带方法返回值被识别为any触发报错。

  • 错误写法示例:
    // 缺失this的类型标注
    private getRouter(): Router {
      // 此处this被推导为any,导致getRouterFor返回值被识别为any
      return UIComponent.getRouterFor(this);
    }
    
  • 正确写法示例:
    import Controller from "sap/ui/core/mvc/Controller";
    import Router from "sap/ui/core/routing/Router";
    import UIComponent from "sap/ui/core/UIComponent";
    
    // 显式标注this的类型
    private getRouter(this: Controller): Router {
      // 类型包版本正常时无需额外加as Router断言
      return UIComponent.getRouterFor(this);
    }
    

临时绕过方案

如果确认类型逻辑无误、暂时无法修正类型定义,可以在对应代码行上方添加注释绕过单条规则检查,不推荐直接全局关闭该规则:

// eslint-disable-next-line @typescript-eslint/no-unsafe-return
return UIComponent.getRouterFor(this);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:39:28