A TypeScript project incurs some overhead versus a plain JavaScript project. This is an unavoidable fact of TypeScript's nature compiling to JavaScript. Investing in this overhead can pay off for larger projects, but how large is large enough to benefit? I expect I won't have a good grasp of that payoff point until I get more experience, but I think I have a better idea after going through Codecademy's "Learn Intermediate TypeScript" course.

Codecademy is very proud of their browser-based integrated learning environment where students can learn and put what they've learned into practice immediately. But this particular course is focused on how we can put TypeScript to use in our own projects outside of Codecademy's environment. The hands-on portion of course consists of downloading ZIP files of partially complete TypeScript projects to our own computers, then following instructions to see what happens.

Under this system, we get experience running the TypeScript compiler tsc at the command line directly, and inside the context of a project managed via npm and its associated package.json file. This is also where we can keep our TypeScript configuration in a tsconfig.json file. This feels like a good way to use TypeScript. If we're already incurring the overhead of setting up such a project, it doesn't take that much additional effort to fold TypeScript into the works.

Amusingly, the most important lesson I learned from this course had nothing to do with TypeScript but was about setting up JavaScript projects with npm. Early on, we were instructed to run "npm run tsc -- --watch" and "npm start -- --watch" but without explaination what those two commands meant. I took a detour to try to figure out exactly what went on with those two lines.

The first part is easy: we're running something via npm command line tool. That something is listed inside the "scripts" section of package.json. It can be a direct mapping: "tsc" mapped to the TypeScript compiler executable. Or it can be something more complex, as "start" mapped to "nodemon build/index.js" I'm still uncertain about the "run", as it seems to be optional and/or the default action. Inferred from the fact it was present in one but not the other.

The next item was challenging: "--" What does the double-dash mean? Unfortunately, I found it impossible to perform a web search on "--" and get relevant results. A combination of the fact "--" isn't a word we can search for and that it is used in many different contexts (C programmers know it as a value decrement) but I didn't wasn't sure what context to search within. It wasn't until another page later on in this course that I learned "--" tells npm to stop interpreting command-line parameters and pass along everything afterwards to the script. So for example, "npm tsc -- --init" means: Use "npm" to launch command "tsc" described in package.json. Then "--" meant there are no more parameters for npm, and "--init" should be given to "tsc". Result: use the current Node.js environment to run command "tsc --init"

This all made sense once I figured it out, but I certainly couldn't have guessed it from just looking at "--". There will be more unknowns as I dive back into Angular framework documentation with "Understanding Angular"