问题标签 [sorbet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
76 浏览

ruby - 如何解决 URI.encode_www_form({"q": "ruby"}) 中的 sorbet 强类型检查器错误“此代码未键入”

如何解决下面代码中的 sorbet strong type-checker error “this code is untyped”?

错误信息

谢谢你的回答。

0 投票
1 回答
1519 浏览

sorbet - 忽略冰糕中的一行

如何忽略特定行的类型检查?

在这个例子中 self.params is not nil,但 sorbet 仍然显示错误。如何禁用特定行的类型检查器?

UPD:再举一个例子

0 投票
1 回答
341 浏览

sorbet - 为什么不推断 T::Boolean 的真假?

Sorbet 推断出 的类型为trueTrueClass, 的类型falseFalseClass。如果它改为推断,通常会很好T::Boolean。为什么不使用特殊情况truefalse改为使用类型T::Boolean

可以使用类型注释来解决此问题,T.let(true, T::Boolean)例如初始化变量,但不必提供这些额外信息会很好。

false循环中对to的赋值var会导致引发错误,因为类型var正在从TrueClassto更改FalseClass

0 投票
2 回答
1048 浏览

sorbet - Sorbet:如何为动态生成的方法添加签名?

我正在使用https://github.com/kenn/active_flaghttps://github.com/chanzuckerberg/sorbet-rails

这是它的 rbi 的样子:

我添加的最后一点(扩展 AR::Base),其余部分srb rbi gems自动生成。

为了实际使用活动标志,我在我的模型中执行此操作:

flag :visible_to, [:employee, :manager, :admin]

visible_to是一个整数列。Sorbet Rails 已经这样输入了它:

可以更改此定义,但它是一个自动生成的文件,我认为更改会丢失。因此,我尝试的下一件事是在使用该方法的位置正上方添加一个 sig:

这里的问题是 Sorbet 失败了,因为我“定义”的方法没有返回任何东西。我知道这很好,因为它会在flag被调用时被覆盖(它在define_method内部使用),但我不知道如何将它传达给 Sorbet。

所以我的问题是。告诉 Sorbet 这个方法ActiveFlag::Value一旦定义就会返回的最好方法是什么,最好不要手动更改自动生成的文件?

顺便提一句。我试图查看enumRails 中的类型是如何处理的……看起来还没有完成sorbet-typed。可能出于同样的原因。

0 投票
1 回答
854 浏览

ruby - 为什么 Sorbet 认为我在 RBI 文件中提供显式签名的方法不存在?

我的一个课程依赖于 gem Geokit,它不提供自己的 RBI 文件,也不包含在sorbet-typedrepo 中。我自己为它手写了几个 RBI 文件,包括我在自己的代码中使用的方法的签名。

当我尝试将依赖 Geokit 的类更改为 时typed: true,它抱怨我使用的方法不存在。

类类型检查在typed: false.

geokit.rbi

bounds.rbi

库/平台/x.rb

我得到的错误如下:

0 投票
1 回答
149 浏览

ruby - 冰糕没有发现哈希签名明显不匹配

给定以下代码:

游乐场链接

我希望 Sorbet 能够识别传递的哈希值参数错误。如何正确声明一个签名,以确保传递的哈希仅包含允许的值类型?

0 投票
1 回答
909 浏览

ruby - Sorbet - 从泛型类继承时的具体类型

如何指定String泛型类型?

→ 在 sorbet.run 上查看

0 投票
1 回答
574 浏览

ruby - 将 Sorbet RBI 文件添加到 gems

我正在研究将 Sorbet RBI 文件添加到我维护的 gem 中可能需要什么,并且我正在尝试为此找出正确的过程。不过,我不想让 Sorbet 作为 gems 的运行时依赖项,所以这意味着将所有类型信息都放在一个单独的 RBI 文件中。

我目前对此的疑问是:

  • 我是否将自己的rbi文件添加到,比如说,./sorbet/rbi/gemname.rbi?如果我将 Sorbet 打包到已发布的 gem 文件中,那是默认情况下会出现的地方吗?
  • 我应该在已发布的 gem 文件中包含其他自动生成的 RBI 文件(在./sorbet/rbi/sorbet-typed和中)吗?./sorbet/rbi/hidden-definitions
  • 我是否应该在我的 gem 文件中包含typedpragma 注释,即使类型信息被分离到一个 RBI 文件中?如果是这样,它应该反映注释所在文件中存在的类型信息,还是应该反映通过 RBI 文件可用的类型信息?
0 投票
0 回答
206 浏览

ruby - 为什么“srb tc”没有为我的 RSpec 测试找到“expect”和“eq”方法?

我正在一个实验性开源项目(ruby​​_crystal_codemod)中试用 Sorbet。我不知道如何让类型检查与嵌套测试项目中的一些 RSpec 测试一起工作。当我运行时srb tc,我看到一些类型检查错误,如下所示:

这是GitHub 上嵌套项目的源目录

您应该能够运行以下命令来重现类型错误:

您应该会看到以下类型错误:

spec/fixtures/rspec_project/sorbet/rbi/gems/rspec-core.rbi等处的 RBI 文件有问题吗?

0 投票
1 回答
41 浏览

sorbet - 我应该如何解决自动生成的 RBI 文件中的合并冲突?

似乎一些合并冲突甚至在errors.txt文件中......

可以只删除所有自动生成的文件然后重新生成它们吗?