The system that enforces different data types in a Programming Languages.
- Easier to debug programs - compiler catches lots of errors
- Static analysis finds lots of useful information about the program
- Efficiency - type can be used to generate optimizations
- Software Verification in correctness
- Documentation - types declare intent