As such, it will "return" an 8 bit value due to the (uint8_t) cast.
But if you assigned that to something else then the value carried forward will be defined by the data type you assigned the result to. For example, the value carried forward in the following will be a 32 bit long value:
unsigned long in = 0x123456;
unsigned long out = highByte(in);
Thus out will carry 0x34 forward within a 32 bit variable.
You can test this for yourself. Note that highByte takes the high byte of a 16 bit value (i.e. 0x3456 in my example), not the high byte of the value provided (i.e. 0x00 in my example).