问题标签 [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 回答
112 浏览

ruby-on-rails - 使用具有流量敏感性的联合类型

我正在尝试将联合类型与is_a?流量控制一起使用,但我仍然遇到冰糕错误。我也尝试过投射,但我仍然遇到同样的错误,即:

Method to_hash does not exist on T::Array[T.untyped] component of T.any(T::Array[T.untyped], T::Hash[Symbol, T.untyped]) https://srb.help/7003

我有以下结构:

我正在以一种(目前)看起来像这样的方法使用它:

我已经尝试合并T.cast以确保冰糕知道它是 elsif 中的哈希,但这似乎没有什么不同。

我的期望是is_a?应该让冰糕知道这post_processing_methodHash. elseif但如果不是这种情况,T.cast当然应该处理这个问题。

0 投票
2 回答
242 浏览

sorbet - 为元动态创建的方法定义方法类型

我正在使用graphql-ruby,我真的很希望能够键入为之类的东西创建的动态方法arguments

小例子:

我试图通过这样做来定义这些:

这似乎不起作用。我也做过

有效,但并不过分漂亮。有没有更好的方法来解决这个问题?

0 投票
0 回答
397 浏览

ruby-on-rails - Sorbet Ruby:将类型签名设置为 ISO8601 的“日期时间”

红宝石和冰糕都是新手——但很兴奋。

我不知道它是否不受支持,或者我是否错误地阅读了文档,但我似乎无法在 Sorbet.org 上找到 Datetimes 的类型。

我希望检查它"2019-07-15T16:15:13-04:00"不仅是一个字符串,而且是一个 ISO8601 日期时间。

有这样的效果:

0 投票
1 回答
1378 浏览

ruby - Sorbet:实例变量必须在`initialize`中声明

initialize获取 -即使我已经在初始化中声明了实例变量,也必须在内部声明实例变量。

typed: strict用来输入检查我的红宝石代码。我使用实例变量的实例方法之一@updated。冰糕抛出错误 - “使用未声明的变量”。我创建了一个初始化方法来声明它。然后“使用未声明的变量”替换为“必须在内部声明实例变量initialize

错误是 -

预期 - 不应该有任何错误,因为实例变量声明在def initialize

编辑:我在Sorbet Playground中复制了这个

0 投票
0 回答
292 浏览

sorbet - 获取散列中的散列键或值类型

来自flowtype,我习惯于$Keys<obj>说“所有键的联合obj”。另外,$PropertyType<obj, 'key'>要获取 的值的类型obj[key]

我正在 Sorbet 中寻找类似的东西,以便更好地利用泛型。

理想情况下,我希望key参数是T.any(<keys in the hash>)并且返回值是typeof hash[:key]

这就是我想要发生的事情:

这有可能吗?我在这里有什么选择?

语境:

我的用例是类型graphql-ruby,尤其是GraphQL::Query::Context. 它本质上是委托[]给一个内部散列,我知道它的形状。我想将泛型传递给GraphQL::Query::Context, like GraphQL::Query::Context[{ my_key: String }]。然后,在def []签名中,我想说一下key基于通用哈希的可用选项。

0 投票
1 回答
92 浏览

sorbet - 有没有办法在不向每个文件添加 # 类型注释的情况下使用 Sorbet?

我想开始在我的 Ruby on Rails 项目中使用 Sorbet,但有人要求我不要将类型注释添加到每个文件中。

有没有办法在不添加注释的情况下使用 Sorbet?

0 投票
1 回答
131 浏览

sorbet - 控制器和助手

我有一个带有控制器和相应帮助器(类似于 Rails)的 Padrino 应用程序。Sorbet 将帮助程序中定义的方法报告为在调用它的控制器中丢失。在当前的 Sorbet 实施中对此有什么可做的吗?

0 投票
1 回答
374 浏览

ruby - 如何表示空哈希

有什么方法可以在 Sorbet 中表达空哈希?

我的属性具有明确定义的形状或设置为{}. 显然T.type_alias({})不会起作用,因为它{}的工作原理Hash是被翻译成T::Hash[T.untyped, T.untyped]. 最简单的解决方案是拥有类似的东西T.nil,然后将其用作T::Hash[String, T.nil](获取不存在键的值将始终返回一个nil值),但没有这样的构造。

解决方法是更改​​代码以不接受那里的空哈希并以不同方式处理它。那么,就有可能拥有T.nilable(SomeType)。但是,我想保留现在的代码,只需添加适当的类型签名。

0 投票
1 回答
298 浏览

ruby-on-rails - 如何在 rake 任务上运行 sorbet typecheck

我注意到默认情况下,srb initetc 不会在 rake 任务上放置 # typed 标志。但是,在 VSCode 上,它确实在 rake 任务上显示错误(例如缺少常量)。

我尝试添加# typed: true到 rake 任务,但它会立即显示错误,例如“命名空间在 Root 中不可用”。有没有人尝试过检查您的 rake 任务?这样做的设置是什么?

0 投票
1 回答
60 浏览

ruby - 从您的 git 存储库中排除 Sorbet errors.txt 是否安全?

errors.txt运行时往往会发生很多变化srb rbi update,而且我之前看到 Sorbet 开发人员提到它除了调试之外并没有真正的意义。

那么,忽略该errors.txt文件是否安全?这样做会不会造成负面影响?