获取哈希键或哈希值的类型

时间:2019-07-17 00:18:06

标签: sorbet

来自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,例如GraphQL::Query::Context[{ my_key: String }]。然后,在def []签名中,我想说一下key的可用选项是基于通用哈希的。

0 个答案:

没有答案