Ruby RBS文件中声明Gem依赖的Redis类型提示找不到如何解决?
RBS声明Redis类型报
cannot find Redis的解决方案 不需要将该方法返回值标注为untyped,报错核心原因是RBS类型检查器没有加载到Redis类对应的类型定义,按你的项目依赖版本选对应方案处理即可:
方案1:使用redis gem内置的官方类型声明
redis gem从4.8.0版本开始已经自带完整的RBS类型定义文件,如果你项目里的redis gem版本满足要求:
- 执行
bundle install确认gem依赖安装完整 - 如果项目用了rbs collection管理第三方类型,执行
rbs collection install同步拉取所有gem的类型声明 - 检查
rbs_collection.yaml配置,确认没有将redis gem加入忽略列表
完成后你原来写的def redis_connect: () -> Redis类型声明就可以正常通过检查。
方案2:手动补充Redis类型声明
如果你用的redis gem版本低于4.8.0,暂时不方便升级依赖,直接在项目的RBS文件目录(通常是sig/目录下)手动添加Redis类的类型声明即可,最小可用的声明参考:
class Redis def self.new: (host: String?, port: Integer?, password: String?) -> Redis # 后续项目里用到Redis实例的什么方法,就在这里补充对应方法的类型签名即可 end
添加完成后类型检查器就能正常识别Redis类型,不需要修改原方法的返回值标注。
注意:随意将明确类型的返回值标注为
untyped会丢失类型检查的保护,后续调用Redis实例方法时不会做参数、返回值的校验,容易引入隐性bug,非必要不这么做。
内容的提问来源于stack exchange,提问作者TiGreX
相关产品推荐
相关产品推荐

