0

来自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基于通用哈希的可用选项。

4

0 回答 0