假设我有一个名为的共享 gem thing
,它可以在多个其他项目中使用,例如example-project
. 我想在我的thing
gem 中使用冰糕来利用类型检查。如何让我的消费项目检查我的 gem 中的类型?
例如,代码可能如下所示
东西宝石
# typed: strict
require 'sorbet-runtime'
class Thing
extend T::Sig
sig { params(phrase: String).returns(String) }
def say(phrase)
"Thing said: '#{phrase}'"
end
end
示例项目
# typed: strict
require 'thing'
Thing.new.say(1) # Should cause a type error
怎么了
运行后srb rbi update
,我得到一个sorbet/rbi/gems/thing.rbi
class Thing
def say(*args, &blk); end
extend T::Private::Methods::MethodHooks
extend T::Private::Methods::SingletonMethodHooks
extend T::Sig
end
这没有我期望的 gem 的信号,srb tc
也不会引发我期望的错误。
我尝试过的其他事情
包括rbi/thing.rbi
在宝石中
这行得通,但我宁愿在 gem 代码中内联写我的 sig,而不是维护单独的 rbi 文件。是否有任何工具可以获取.rb
带有 sigs 的文件并输出.rbi
文件(并且可能从.rb
文件中剥离 sigs,以便它们可以在没有冰糕的情况下分发 gem)。我正在考虑一个类似于 typescript 的工作流程tsc --declaration
,它来自.ts => .d.ts + .js
.