问题标签 [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.
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_method
是Hash
. elseif
但如果不是这种情况,T.cast
当然应该处理这个问题。
sorbet - 为元动态创建的方法定义方法类型
我正在使用graphql-ruby
,我真的很希望能够键入为之类的东西创建的动态方法arguments
。
小例子:
我试图通过这样做来定义这些:
这似乎不起作用。我也做过
这有效,但并不过分漂亮。有没有更好的方法来解决这个问题?
ruby-on-rails - Sorbet Ruby:将类型签名设置为 ISO8601 的“日期时间”
红宝石和冰糕都是新手——但很兴奋。
我不知道它是否不受支持,或者我是否错误地阅读了文档,但我似乎无法在 Sorbet.org 上找到 Datetimes 的类型。
我希望检查它"2019-07-15T16:15:13-04:00"
不仅是一个字符串,而且是一个 ISO8601 日期时间。
有这样的效果:
ruby - Sorbet:实例变量必须在`initialize`中声明
initialize
获取 -即使我已经在初始化中声明了实例变量,也必须在内部声明实例变量。
我typed: strict
用来输入检查我的红宝石代码。我使用实例变量的实例方法之一@updated
。冰糕抛出错误 - “使用未声明的变量”。我创建了一个初始化方法来声明它。然后“使用未声明的变量”替换为“必须在内部声明实例变量initialize
”
错误是 -
预期 - 不应该有任何错误,因为实例变量声明在def initialize
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
基于通用哈希的可用选项。
sorbet - 有没有办法在不向每个文件添加 # 类型注释的情况下使用 Sorbet?
我想开始在我的 Ruby on Rails 项目中使用 Sorbet,但有人要求我不要将类型注释添加到每个文件中。
有没有办法在不添加注释的情况下使用 Sorbet?
sorbet - 控制器和助手
我有一个带有控制器和相应帮助器(类似于 Rails)的 Padrino 应用程序。Sorbet 将帮助程序中定义的方法报告为在调用它的控制器中丢失。在当前的 Sorbet 实施中对此有什么可做的吗?
ruby - 如何表示空哈希
有什么方法可以在 Sorbet 中表达空哈希?
我的属性具有明确定义的形状或设置为{}
. 显然T.type_alias({})
不会起作用,因为它{}
的工作原理Hash
是被翻译成T::Hash[T.untyped, T.untyped]
. 最简单的解决方案是拥有类似的东西T.nil
,然后将其用作T::Hash[String, T.nil]
(获取不存在键的值将始终返回一个nil
值),但没有这样的构造。
解决方法是更改代码以不接受那里的空哈希并以不同方式处理它。那么,就有可能拥有T.nilable(SomeType)
。但是,我想保留现在的代码,只需添加适当的类型签名。
ruby-on-rails - 如何在 rake 任务上运行 sorbet typecheck
我注意到默认情况下,srb init
etc 不会在 rake 任务上放置 # typed 标志。但是,在 VSCode 上,它确实在 rake 任务上显示错误(例如缺少常量)。
我尝试添加# typed: true
到 rake 任务,但它会立即显示错误,例如“命名空间在 Root 中不可用”。有没有人尝试过检查您的 rake 任务?这样做的设置是什么?
ruby - 从您的 git 存储库中排除 Sorbet errors.txt 是否安全?
errors.txt
运行时往往会发生很多变化srb rbi update
,而且我之前看到 Sorbet 开发人员提到它除了调试之外并没有真正的意义。
那么,忽略该errors.txt
文件是否安全?这样做会不会造成负面影响?