Ответ 1
deftype
создает объект bare-bones, который реализует протокол.
defrecord
создает неизменяемую постоянную карту, которая реализует протокол.
Что использовать зависит от того, что вы хотите. Вам нужна полная структура данных ClojureScript? Затем используйте запись. Вы просто хотите, чтобы голова не делала ничего, кроме удовлетворения протокола? Затем используйте тип.
Два бита документации, которые вы ссылаетесь на типы использования, потому что они пытаются проиллюстрировать протоколы на самом базовом уровне, а типы имеют меньшее значение, чем записи, так сказать.
Однако в большинстве случаев объектно-подобные вещи в режиме реального времени в Clojure/ClojureScript необходимо хранить поля данных вместе с объектом, и для этого вы должны решительно использовать запись, по той же причине вы должны использовать любую из Clojure неизменяемых коллекций.