И, да, что бы вы лучше понимали, это сделано для того, что бы вы не присвоили строке значение числа, будет не то, будет ошибка, когда попытаетесь сложить, поэтому компилятор блокирует такие вещи
нет, для нормальной типизации не существует юнионов, только восходящие приведения, поэтому для типизации юнионы не нужны, они могут хранить не приводимы к единому знаменателю типы и приводить к неожиданному поведению