能否不在Ruby源码中写sig,仅通过RBI文件使用Sorbet做静态类型检查?
Sorbet 仅依赖RBI文件做静态类型检查的方案说明
完全可以只通过 sorbet 目录下的 RBI 文件补充类型签名,无需在业务源代码中添加任何 sig 相关代码,这是 Sorbet 原生支持的使用模式,适合你需要低侵入接入类型检查的场景。
实操步骤
- 先执行
srb init完成项目 Sorbet 初始化,生成的默认 sorbet 目录已经包含 Ruby 标准库、项目第三方依赖的自动生成 RBI 文件,整个过程不会修改任何业务代码 - 你可以自定义单独的 RBI 目录存放业务代码的类型签名,比如
sorbet/rbi/business/,所有业务类、方法、常量的签名都可以统一写到对应 RBI 文件中,写法和直接写在源文件里的 sig 完全一致,示例如下:
# sorbet/rbi/business/user.rbi class User sig { returns(String) } def nickname; end sig { params( post_id: Integer, content: String ).returns(Post) } def create_post(post_id, content); end end
- 本地执行类型检查时直接运行
srb tc即可,Sorbet 会自动合并加载所有 sorbet 目录下的 RBI 签名与业务源代码,完成全量类型校验,整个过程完全不影响现有业务代码,同事不会感知到你本地的类型检查操作
注意事项
如果你本地同步了最新业务代码后出现类型误报,优先检查是否业务侧修改了方法定义、参数结构,同步更新对应 RBI 文件的签名即可。后续要推广方案时,可以先把 RBI 目录提交到代码仓库,默认不开启 CI 侧的类型检查门禁,等团队达成共识后再逐步开启校验流程,整体接入阻力极低。
内容的提问来源于stack exchange,提问作者Oni
相关产品推荐
相关产品推荐

