You guys are all awesome, thanks for the good feedback and the further reading! I’ll be sure to check those out!
So after posting this I went and made an ActorComponent; and realised that I could just do a check to see if an Actor has that component in my other classes that want to manipulate values or get values from it (which skips doing checks like, is it this, or is it this, or is it this? So on and so forth). This seems like the quickest and most foolproof solution (and certainly the easiest for me to understand).
The idea was that I wanted to Append properties to certain classes, such as a Vehicle that can be built (in-game) from a building. The vehicle would have properties such as build time, build cost, health etc, but would inherit from APawn so that I could easily update my code to the latest version of Unreal at the time and avoid any changes to source code. Sometimes however I might want to build an actor or some other class, but with those same properties. Being able to specify which types of actors had these properties and being able to manipulate them all universally without a LOT of conditional checks and casting was the plan. Of course, I wanted to make Blueprints of the basic ‘Vehicle’ class for different vehicles, all with different values for those same properties.
Team Number is another one I would have wanted to store as well, I looked at UT’s source code where they use an interface to allow classes to get a TeamNumber from something, but I admit I didn’t fully understand the code written there. Thanks for giving a better description of how interfaces work, it makes much more sense now 
(Hope this post makes sense, still not quite awake ;))