Notes on Codecademy "Learn TypeScript"
I want to go back and take another look at Angular web application development framework, because I've learned a lot about web development since my earlier attempt. But before I do, I want to review TypeScript, which is what Angular uses to tame some of JavaScript's wild nature. Conveniently, Codecademy has a "Learn TypeScript" course for me to do exactly that.
As its name implies, TypeScript imposes some of the benefits of data type enforcement to JavaScript's default data type system, where anything can go anywhere. The downside of JavaScript's flexibility is that it also allowed many bugs to hide until emerging at very inconvenient times. While it's always possible to move to an entirely different language if type safety is desirable, the beauty of TypeScript is that it maintains full compatibility with JavaScript so we don't have to leave that ecosystem (JS runtimes, libraries, tools, etc.) to gain benefits of compile-time type checks. TypeScript accomplishes this magic by performing its checks on TypeScript source files. Once everything has been verified to be satisfactory, that source code is translated to standard JavaScript for execution.
But before that compiler runs, TypeScript syntax gives us a lot of tools to organize our code to catch bugs at "compile" time. (More accurately TypeScript-to-JavaScript transpiling time.) There are static code analysis features to find problems. Starting with simple ones like a mistyped variable name would get caught because it has no declared type. We also get (illusions of) features like enum
so we can constrain values within a defined valid set.
However, in order to stay compatible with JavaScript, TypeScript couldn't offer all the rigorousness of a strictly typed language. There are various middle ground features sprinkled throughout so we don't have to take all-or-nothing. The type guard of "[property] in [object]" aligns with "duck typing" patterns: checks for the method we care about instead of the exact object type or interface. It was also amusing to see support for generics, which is becoming a feature in strictly typed languages but now we have it in TypeScript as well compiling down to "do whatever you want" JavaScript. That leads to things like Index Signatures with no real counterpart in strictly typed languages, and I credit its existence to JavaScript for being weird. I wouldn't blame everything on JavaScript, though. I sometimes stumble across TypeScript union types, which lets us support a limited set of types. In one practice exercise, we have an array that can be an array of one of two types. I typed TypeA[] | TypeB[]
which made sense to my brain, but that was not acceptable. I had to use (TypeA | TypeB)[]
and I still don't understand why.
This course also exposed me to certain JavaScript things that were not specific to TypeScript. There was a brief mention of documentation comments: /** */
blocks that included markup like @param
and @returns
. I vaguely recall seeing this before but I no longer remember what this is called and the course didn't give me a pointer. This course was also the first time I saw JavaScript rest parameters and its counterpart spread syntax. And finally, this is where I learned of number.toFixed()
which I will definitely use in the future.
Like all Codecademy courses, this one gives us enough context for us to navigate product document on our own. In this case, the official reference is The TypeScript Handbook. Explanations in the handbook make a lot more sense to me after this Codecademy course than it did before, so I'd say "Learn TypeScript" was worth my time investment.