IMO, la tua domanda è composta da 2 domande:
Is a good idea to wrap built-in/3rd party types in own types?
Dipende. Avere propri tipi attorno ai tipi esistenti è ottimo quando si modifica il tipo sottostante perché la logica esistente può essere conservata (idealmente) senza modifiche. È come avere un'architettura a 3 pneumatici e puoi modificare il database senza modificare la logica di business. Tuttavia, la creazione di tutti questi tipi richiede tempo e gli sviluppatori hanno anche bisogno di tempo per impararli ...
Is a good idea to code own types that behave different from the original types when using the same syntax?
No. È cattivo perché ha effetti collaterali. Potrebbero apparire strani bug perché uno non era a conoscenza del nuovo comportamento. Inoltre rende complicato il debug e aumenta il tempo / i costi del processo di sviluppo.