to be honest, I‘d not recommend that approach of having one link template with multiple input components for different types of links. When the project grows, there might be more and more types (links to datasets, other special cases) that require more specific input components.
Another problem: If yo do not clear the „unused“ input component - in your example the FS_REFERENCE - the reference to that page is still part of the reference graph which will prevent deletion of that referenced element even if it is not „really“ used.
On the other hand, I understand that you don‘t want to create multiple link templates all containing the link text.
My recommendation would be to use a “general“ link template like yours containing the link text, but instead of using one input component per link type, using an CMS_INPUT_LINK input component with multiple „inner“ link templates.
That approach is more „modular“ and easier to maintain.
Some general thoughts about templating best practices:
Regarding the use of a toggle (which you don’t need anymore using my approach) - see Felix‘s comment: I always recommend NOT using a toggle if there is - even theoretically - the possibility of more than two options or the two options are not „logical opposites“. The general approach „if there are only two options, use a toggle“ is wrong in my opinion because toggles should only be used if you use it for a real „yes or no“ / „true or false“ setting (like „open in new window“, „show icon“ etc.). From the logical point of view, there is no such thing like the opposite of an „external link“.
Even when using a radiobutton, I‘d recomment to rename it to something like „st_linkType“ and use option values like „external“ and „internal“ because it’s easier to understand.