macropreviously cljs.spec/map-ofEdit
(map-of kpred vpred & opts)

Source docstring:
Returns a spec for a map whose keys satisfy kpred and vals satisfy
vpred. Unlike 'every-kv', map-of will exhaustively conform every

Same options as 'every', :kind defaults to map?, with the addition of:

:conform-keys - conform keys as well as values (default false)

See also - every-kv
Source code @ clojurescript:src/main/cljs/cljs/spec/alpha.cljc
(defmacro map-of
  [kpred vpred & opts]
  (let [desc `(map-of ~(res &env kpred) ~(res &env vpred) ~@(res-kind &env opts))]
    `(every-kv ~kpred ~vpred ::conform-all true :kind map? ::describe '~desc ~@opts)))