我已经在Rails代码库中安装了Sorbet,并且看到了以下错误的许多实例:
sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi:958:
Method ActiveRecord::ConnectionAdapters::TableDefinition#column redefined without matching argument count. Expected: 3, got: 5 https://srb.help/4010
958 | def column(
959 | name,
960 | type,
961 | index: nil,
962 | default: nil,
963 | **options
964 | ); end
sorbet/rbi/gems/activerecord.rbi:5256: Previous definition
5256 | def column(name, type, **options); end为了消除类型错误,我要么在其中一个文件中将typed: true更改为typed: false (这不包括一些不重叠的类型),要么手动删除/注释重叠方法(这既耗时又脆弱)。
我想知道是否有某种编程解决方案,在这种解决方案中,我可以说“在发生冲突的情况下,使用具有更高可用性的方法”,或者“始终选择最优类型的定义”。
同样,这是在Rails代码库中,但我认为这将存在于手工生成和自动生成的RBI之间的任何冲突中。
发布于 2020-01-06 19:34:03
我编写了一些这样的方法,不幸的是,由于"Shapes“(Sorbet的可键入散列的实验性实现)不允许可选键,所以它们不能准确地表示这些方法。因此,许多方法--尤其是Rails中的复杂内容--在sorbet类型和sorbet的自动生成文件之间是不同的。
我刚刚使用srb rbi suggest-typed自动设置了回购中文件的类型,它只是将其标记为false。据我所知,即使文件被标记为false (尽管我可能会更多地查看该类型信息,以验证确实如此),但仍然使用来自sorbet类型化的类型信息。
不幸的是,目前我对这个问题没有更好的解决方案,但是,到目前为止,仅仅使用建议类型似乎就足够了。
https://stackoverflow.com/questions/59616105
复制相似问题