You can spec a record as follows:
(clojure.spec/def ::name string?) (clojure.spec/def ::age pos-int?) (clojure.spec/def ::occupation string?) (defrecord Person [name age occupation]) (clojure.spec/def ::person (clojure.spec/keys :req-un [::name ::age ::occupation])) (clojure.spec/valid? ::person (->Person "john doe" 25 "programmer")) ;;=> true (clojure.spec/valid? ::person (->Person "john doe" "25" "programmer")) ;;=> false
At some point in the future, a reader syntax or built-in support for qualifying record keys by the records' namespace may be introduced. This support already exists for maps.