To understand what TypeScript is, first you must be familiar with the concept of typing.
JavaScript developers will probably be aware of the difference between Equality (==) and Identity (===) Operators.
These operators differentiate between entities like the string "123" and the integer 123.
This is because numbers and characters are fundamentally stored differently in memory.
In JavaScript, all variables are declared using the keyword var (or const/let).
However, this is not the case in strongly typed languages, such as Java and C, which CANNOT declare any variable without an explicitly defined data type.
JavaScript is ‘interpreted’, not ‘compiled’
A data type is a formalization of the way in which information is represented in a computer system, such as the case with Integers and Strings.
Languages such as Java and C are referred to as strongly typed languages, because they depend on these types being defined at compile time, before the high-level language is converted into machine code or byte-code.
JavaScript is an interpreted language (it is not compiled)
It uses dynamic typing because, as the name implies, JavaScript was created with script-building in mind.
Scripts generally automate the execution of code that is exterior to the script itself (such as compiled programs).
As JavaScript development has become increasingly complex, there has arisen greater need for more explicit typing.
This need was partially met by tools such as PropTypes.
However, TypeScript, which was created by Microsoft, is especially helpful for validating the consistency of user-designed data objects.
Type Checking
Type checking is the idea that the shape of a data object remains consistent as it is passed between different parts of a program.
TypeScript extends the JavaScript language, making it possible to explicitly define the shape of objects when they are declared, or passed into / returned from a function.