Emacs Lisp doesn't have any support for automatic type checking, whether in the byte compiler or at runtime.
The idiomatic way to report an error at runtime is to check the argument against a predicate function, and signal the error `wrong-type-argument if it doesn't match.
Furthermore, to express a choice between a small, fixed number of items, the idiomatic method is to use symbols, not strings.
(defun graph-type-p (object)
"Return t if OBJECT is a graph type.
The possible graph types are `dag' and `rulegraph'."
(memq object '(dag rulegraph)))
(defun build-graph (graph-type data)
"…"
(unless (graph-type-p graph-type)
(signal 'wrong-type-argument (list 'graph-type-p graph-type)))
…)