Rails项目中:如何让Sorbet识别被标记为ignore的类?
解决Sorbet无法识别被标记为ignore的类的几种方案
- 手动添加自定义RBI声明
创建一个针对Tracking类的RBI文件(比如sig/tracking.rbi),在文件里简单声明类的存在,让Sorbet能识别它:
# sig/tracking.rbi class Tracking # 若需要可以补充必要的方法签名,不用太完整 end
Sorbet会自动加载项目sig/目录下的RBI文件,这样上游引用Tracking的文件就能正常识别该类,同时原Tracking文件保持#typed: ignore不受影响。
- 给上游文件的特定引用加行级忽略
在上游文件中引用Tracking的代码行添加# sorbet: ignore注释,只忽略这一行的类型检查,不影响整个文件的其他代码:
# typed: false class UpstreamClass def process # sorbet: ignore Tracking.perform_async(args) end end
- 用
T.unsafe()包裹引用
在上游文件里使用T.unsafe()包裹Tracking的调用,明确告诉Sorbet忽略这个对象的类型校验,同时保留其他代码的类型检查:
# typed: false class UpstreamClass def process T.unsafe(Tracking).perform_async(args) end end
- 最小化修改Sidekiq的RBI文件
如果愿意尝试小范围修改RBI,直接修正Sidekiq::Job的类型声明:找到项目中Sidekiq对应的RBI文件(比如sig/sidekiq.rbi或bundle目录里的RBI),把class Sidekiq::Job改成module Sidekiq::Job。这个改动只针对根源问题,可能不会引发大量其他错误,这样Tracking文件就可以不用设为#typed: ignore了。
内容的提问来源于stack exchange,提问作者Peter Nixey
相关产品推荐
相关产品推荐

