Only have one struct with a member of every type. That one struct will be the type of every variable you have.
If the language you use support implicit operator overload abuse them to make sure all types can be implicitly converted to each other.
Ex.
struct Variable { byte a; short c; int d; long e;
...
}This will make it impossible to know what type a variable is until you find its assignment, which of course isn't on the same line as the declaration and even better reuse the same variable for multiple values.