That's not what "static typed" means.
Static, referring to types, means at compile time, or before runtime, the types of variables and assignments can be verified; no invalid assignments are possible.
What you have here is dynamic typing; you can't verify the types until runtime, and then you throw an exception.