The process of verifying and enforcing constraints of types in a Type Safe language.

  • Static type checking (compile-time) Allows for Type Inference
  • Dynamic type checking (run-time)