Для целочисленных идентификаторов я пробую единицы измерения вместо объединений с одним случаем, и хочется услышать второе мнение, пока это не расползлось. CustomerId of int выделяет память, если не помечен [<Struct>], и каждое использование идёт через конструктор или сопоставление. С [<Measure>] type customerId идентификатор становится int<customerId>, единица стирается во время выполнения, а передача int<orderId> туда, где ждут идентификатор клиента, не компилируется.
Цены, найденные пока, небольшие, но настоящие. Единицу принимают только числовые типы, так что строковым идентификаторам всё равно нужно объединение. Чтобы получить обычное число, пишешь int id, и читается это нормально. А сериализатор JSON на рефлексии видит просто int, поэтому на входе единицу приходится навешивать руками, и ровно там путаница и может проскочить.
Может, единицы для внутренних идентификаторов, а объединение на краях, где значения приходят снаружи? Не знаю, стоит ли такое разделение объяснять следующему читателю.