使用 Sorbet 时如何重写 Ruby on Rails 中生成的属性方法?

klm*_*iGR 5 ruby ruby-on-rails typechecking sorbet

我有一个带有 jsonb 列的模型。此列仅接受 json 对象。Sorbet 正确生成包含以下内容的 .rbi 文件:

module PushedContent::GeneratedAttributeMethods
  sig { returns(T.nilable(T.any(T::Array[T.untyped], T::Boolean, Float, T::Hash[T.untyped, T.untyped], Integer, String))) }
  def value; end

  sig { params(value: T.nilable(T.any(T::Array[T.untyped], T::Boolean, Float, T::Hash[T.untyped, T.untyped], Integer, String))).void }
  def value=(value); end
end
Run Code Online (Sandbox Code Playgroud)

jsonb 列将始终存储数组或哈希值。由于这些方法签名不能满足我的需求,我决定在文件夹下的我自己的文件中覆盖它们:sorbet/rbi/types/app/models/model.rbi

module PushedContent::GeneratedAttributeMethods
  sig { returns(T.nilable(T::Array[T.untyped], T::Hash[T.untyped, T.untyped])) }
  def value; end

  sig { params(value: T.nilable(T::Array[T.untyped], T::Hash[T.untyped, T.untyped])).void }
  def value=(value); end
end
Run Code Online (Sandbox Code Playgroud)

当我运行时,bundle exec rake rails_rbi:models\[Model\]我期望 sorbet 会看到覆盖的方法,并将它们从自动生成的文件中排除。但不幸的是事实并非如此。两个文件中都存在方法。因此,我收到与自动生成的文件相对应的类型错误,而不是与我编写的文件相对应的类型错误。有趣的是,当我运行时srb tc没有错误。

当我从自动生成的文件中删除方法时,类型错误消失了,但显然这不是处理它的最佳方法。

如何覆盖这些方法以便将它们从自动生成的文件中排除?