Вы можете использовать
Elem = type_member(fixed: String)
Повторное объявление члена типа родителя уже является обязательным (что вы можете увидеть в сообщении об ошибке во фрагменте кода, в котором написано Type Elem declared by parent Array must be re-declared in NameList
) и повторно объявить егос параметром fixed:
позволяет указать этот тип параметра как конкретный тип.
→ Просмотр на sorbet.run
# typed: strict
class NameList < Array
extend T::Sig
Elem = type_member(fixed: String)
sig {params(names: T::Array[String]).void}
def initialize(names)
names.each { |n| self << n}
end
sig {returns(String)}
def csv
(map { |n| n.join(',') }).join("\n") # Method `join` does not exist on String
end
end
nl = NameList.new(['Bruce', 'Clark', 'Peter'])
# Output length of first name.
puts(nl.first&.size)
puts(nl.first&.sizee) # Method `sizee` does not exist on String