Contracts that are enforced at compile time are types, whether you call them that or not.
The program must verify the property at runtime and create a witness to the proof, which it can then pass to functions to say that it has done the necessary work.
So I guess the answer is yes and no. I would say the whole point of dependently-typed languages is that we can statically determine that somebody is maintaining correctness, be it at compile time or at run time.
If they are enforced at compile time, they are static.