Thank you, that was a typo in my "code".
Having distinct types is quite useful. It allows for better error messages, type safety, and showing intent. In practice you will not need to do this amount of casting because, you should only make a new type of something simple (like an integer, float, etc) if you really need to.
A short example would be something like time
Duration :: i64;
Nanosecond: Duration : 1;
Microsecond: Duration : 1000 * Nanosecond;
Millisecond: Duration : 1000 * Microsecond;
Second: Duration : 1000 * Millisecond;
Minute: Duration : 60 * Second;
Hour: Duration : 60 * Minute;
d := 12 * Second;
fmt.println(d/time.Millisecond) // 12000
This is really personal opinion at the end of the day and I prefer distinct types compared to type aliases.