A[Integer].new(42)
- это правильный способ указать универсальный тип.
Вы, вероятно, ожидаете, что сорбет выведет тип Integer из ввода (42). Тем не менее, сорбет не работает таким образом. Вы должны указать универсальный тип как A [Integer], и sorbet будет использовать его для проверки типа ввода (42) и вывода (@value) во время выполнения.
Я понимаю, что можно явно указать тип аргумента A [Integer] .new (42), но таким образом я не могу поместить информацию о типе хранения отдельно в файл .rbi.
Вероятно, невозможно разделить конструкцию типа (или конструкцию сорбета) и ваш код чисто так, как это делается для универсального типа. Как вы могли видеть даже для T :: Array или T :: Hash, вы также должны указать тип таким же образом. И для постоянного вам часто нужно использовать T.let.