来自flowtype
,我习惯于$Keys<obj>
说“所有键的联合obj
”。另外,$PropertyType<obj, 'key'>
要获取 的值的类型obj[key]
。
我正在 Sorbet 中寻找类似的东西,以便更好地利用泛型。
理想情况下,我希望key
参数是T.any(<keys in the hash>)
并且返回值是typeof hash[:key]
这就是我想要发生的事情:
# my_rbi.rbi
class SomeClass
Elem = type_member
sig { params(key: Keys[Elem]).returns(PropertyType<Elem, key>) }
def [](key); end
end
# somewhere else
sig { returns(SomeClass[{ my_key: String }]) } # add the hash as a generic
def context
# return the context
end
context[:my_key] # works, is a String!
context[:not_my_key] # fails
这有可能吗?我在这里有什么选择?
语境:
我的用例是类型graphql-ruby
,尤其是GraphQL::Query::Context
. 它本质上是委托[]
给一个内部散列,我知道它的形状。我想将泛型传递给GraphQL::Query::Context
, like GraphQL::Query::Context[{ my_key: String }]
。然后,在def []
签名中,我想说一下key
基于通用哈希的可用选项。