programming language theory
Strongly typed
A variable's type cannot change over its lifetime. Nuanced though because most languages support aliasing which can make it appear as if a variable changed type, even though it hasn't; syntactic sugar merely drops the old variable and creates a new one with the same name
Dynamically typed
Types checked and enforced at runtime
Weakly typed
A variable's type can change and, typically, implicit conversions are commonplace
Statically typed
Types checked and enforced at compile time