Kurz erklärt
Ein Typsystem prüft, dass Werte nur auf erlaubte Weise verwendet werden, etwa keine Zahl durch einen Text geteilt wird. Typinferenz lässt den Compiler Typen selbst erschließen.
Genauer
Statische Typen werden vor der Ausführung geprüft (Java, Rust, TypeScript), dynamische erst zur Laufzeit (Python, JavaScript). Starke Typsysteme finden viele Fehler früh. Generics, Sum-Types und Traits machen sie ausdrucksstark.