← ALL POSTS
CUSTOM SOFTWARE EXPLAINER

Why we build in TypeScript

If you've hired anyone to build software in the last few years, you've probably heard the word TypeScript. Maybe a developer told you the project "should be in TypeScript" and you nodded along. Here's what that actually means, why we default to it for almost everything we build, and why it matters to you as the person paying the invoice.

What TypeScript actually is

JavaScript is the language that runs in every web browser and powers a huge share of servers through Node.js. TypeScript is JavaScript with one big addition: types. A type is a label that says what kind of thing a piece of data is. This variable is a number. This function takes a customer record and returns an invoice. That field can be empty, so check it before you use it.

Plain JavaScript doesn't enforce any of that. You can pass a customer name where the code expected a customer ID, and JavaScript will happily run it. The bug shows up later, at runtime, usually in front of a user. TypeScript catches it before the code ever runs. The compiler reads the whole project and flags every place where the pieces don't fit together.

The important part: TypeScript compiles down to plain JavaScript. It runs everywhere JavaScript runs. You're not buying into some exotic platform. You're adding a safety layer on top of the most widely used language in the world.

Types catch the bugs tests miss

People sometimes argue that good tests make types unnecessary. We've never seen that hold up on a real project. Tests check the cases someone thought to write. Types check every line, every time, automatically.

The bugs that bite hardest in business software are boring ones. A field that's sometimes null. A date stored as a string in one place and a Date object in another. An API response that changed shape and nobody noticed until the reports came out wrong. Tests rarely cover those because nobody imagined them. The type checker doesn't have to imagine anything. It knows the shape of every piece of data and complains the moment two shapes disagree.

In practice, a whole category of production bugs just disappears. Not all bugs. Logic errors still exist, and you still need tests for those. But the "undefined is not a function" class of failure, the one that pages someone at 2 a.m., mostly goes away.

Why this matters to your budget

You're not paying for TypeScript because it's trendy. You're paying for what it does to the cost curve over time.

Where we skip it

We're not religious about this. A ten-line script that moves files or pokes an API once a day doesn't need a compiler. For quick automation we'll often reach for plain JavaScript or Python and get it done in an afternoon.

The line for us is roughly this: if the code will live longer than a month, if more than one person will ever read it, or if it handles money or customer data, it gets types. Anything past a throwaway script, we build in TypeScript. The setup cost is an hour. The payoff runs for the life of the project.

How to know it's done right

If someone builds TypeScript software for you, a few questions tell you whether they used it properly or just checked a box:

You don't need to understand the answers deeply. You just need to hear confident, specific answers instead of hand-waving. We build in TypeScript by default because it makes the software cheaper to own, not just cheaper to ship. That's the standard we'd want if we were the ones writing the check.

Stuck on this, or want it done for you? That's the job.

Email us →
RELATED READING
Testing that fits a small app budget Explainer
Build a REST API with Node.js and Express Step-By-Step Guide
Set up CI/CD with GitHub Actions Step-By-Step Guide
Adding AI to your app without the hype Explainer
Customer portals: let clients help themselves Explainer
NO FORMS. JUST EMAIL.
mason@hurbs.io
or (832) 457-4317, LA and Houston