Type system is a set of rules that assigns a property called type to the various constructs of a computer program, such as variables, expressions, functions or modules
A type error is erroneous or undesirable program behavior caused by a discrepancy between differing data types for the program's constants, variables, and methods.
The extent to which a programming language discourages or prevents type errors
A strongly typed language typically disallows implicit conversions between unrelated types
A weakly typed language makes conversions between unrelated types implicitly
Static type checking is the process of verifying the type safety of a program based on analysis of source code.
Dynamic type checking is the process of verifying the type safety of a program at run-time
Manifest typing is explicit identification by developer of the type of each variable being declared
Automatic detection of type based on usage.
If it walks like a duck and it quacks like a duck, then it must be a duck