TypeScript is a superset of JavaScript: all JavaScript programs are syntactically valid TypeScript programs, but not all TypeScript programs are valid JavaScript programs.
TypeScript adds a static type system that models JavaScript’s runtime behavior and tries to spot code that will throw exceptions at runtime.
It is possible for code to pass the type checker but still throw at runtime.
TypeScript disallows some legal but questionable JavaScript constructs such as calling functions with the wrong number of arguments.
Type annotations tell TypeScript your intent and help it distinguish correct and incorrect code