SBCL does offer optional static typing as it goes beyond Common Lisp and can perform static type checking across compilation units.
If you have a lisp file like:
(defun foo (x) (declare (fixnum x)) (* x 2))
(defun bar () (foo 3.5))
Where bar has a static type error by calling foo with a float value, compiling the file with SBCL will give you the expected static type warning: ; file: foo.lisp
; in: DEFUN BAR
; (FOO 3.5)
;
; note: deleting unreachable code
;
; caught WARNING:
; Asserted type FIXNUM conflicts with derived type
; (VALUES (SINGLE-FLOAT 3.5 3.5) &OPTIONAL).
; See also:
; The SBCL Manual, Node "Handling of Types"