Types like BeaconState and BeaconBlockBody change for each fork, with the changes the library creates a new type with the fork prefix (i.e. BeaconStateCapella) and includes the new fields which are usually an append from the previous fork type.
This approach is tricky because the fastssz generated encoding files grow with each fork. Besides, this multi-type/fork approach is difficult to manage at the logic level.
A couple of ideas: embed types, create a generic signing container, etc.