For some APIs that do not directly operate on numbers, I believe this confusion can be avoided as much as possible.
I often want to force users to use destructuring syntax when accessing an API’s return value. However, returning a tuple as a return value can lose semantic information. If a structure is returned, fields can provide semantic information, but the structure cannot force users to use destructuring syntax when accessing the return value (especially if the structure itself doesn’t directly support destructuring).
For these situations, I’ve gradually begun to embed semantic information into the type itself, no longer using basic numeric types to represent these concepts, but instead encapsulating related concepts in a packed struct.
However, I understand that this approach is still not suitable for purely mathematical functions like sinCos.