class T::Types::TypedHash

def initialize(keys:, values:)

def initialize(keys:, values:)
@keys = T::Utils.coerce(keys)
@values = T::Utils.coerce(values)
@type = T::Utils.coerce([keys, values])
d

def name

@override Base
def name
  "T::Hash[#{@keys.name}, #{@values.name}]"
end

def new(*args, &blk) # rubocop:disable PrisonGuard/BanBuiltinMethodOverride

rubocop:disable PrisonGuard/BanBuiltinMethodOverride
def new(*args, &blk) # rubocop:disable PrisonGuard/BanBuiltinMethodOverride
  Hash.new(*T.unsafe(args), &blk) # rubocop:disable PrisonGuard/RestrictHashDefaults
end

def underlying_class

def underlying_class
  Hash
end

def valid?(obj)

@override Base
def valid?(obj)
  obj.is_a?(Hash) && super
end