← Stackzilla Blog

TypeScript Did Not Save Your Code, You Did

Published April 8, 2026 · 4 min read · TypeScript, JavaScript, software quality, engineering discipline, web development

TypeScript is one of the best tools in modern web development. It is also one of the most over-credited ones. The discipline that makes TypeScript codebases good comes from you, not the type system.

TypeScript has earned its place in modern web development. The type system catches real bugs, the IDE support is excellent, and for large codebases with multiple contributors, the structure it provides is genuinely valuable. This is not a case against TypeScript. It is, however, a case against the idea that adopting TypeScript is what makes a codebase good. **The Escape Hatch Problem** Almost every TypeScript codebase that has been maintained for more than a year develops a collection of escape hatches. The any type, type assertions, ts-ignore comments, and aggressive use of unknown with unsafe casts are all ways of telling the type system to step aside. They accumulate over time, and in codebases where the team reaches for them regularly, the type safety benefits are partially hollowed out. TypeScript permits these escape hatches for good reasons, since there are cases where you genuinely know more than the compiler does. The problem is that they also show up when the engineer is in a hurry, when the type is genuinely complex and the fix is non-obvious, or when someone is new to the codebase and does not know a better approach. **What Actually Makes the Difference** The codebases that are genuinely well-typed tend to have a few things in common that are not about the language. There are clear conventions about where data is validated and coerced into typed forms. There is a culture where any requires justification. There is discipline around defining types early, at the boundary of the system, rather than inferring your way through business logic. There are code reviews where type correctness is a genuine concern. All of those things are team practices and individual discipline. TypeScript is the tool that makes them enforceable. But the discipline precedes the enforcement. **The Plain JavaScript Corollary** Some of the best-written code in the world is in plain JavaScript. Clear function signatures, well-named variables, small modules with clear responsibilities, good test coverage: these things produce readable and maintainable code in any language. Adding TypeScript to a disorganized JavaScript codebase does not produce a well-organized TypeScript codebase. It produces a disorganized TypeScript codebase with a lot of red squiggles. **The Real Value Proposition** This is not an argument for skipping TypeScript. It is an argument for being clear-eyed about what TypeScript gives you and what it does not. TypeScript catches a genuine class of errors that are expensive to find in production. It makes large codebase navigation much easier. It creates a machine-readable contract between parts of a system that helps when refactoring. What it does not give you is the judgment to design good abstractions, the habit of writing clear code, or the team culture to review it carefully. **The Credit Goes Where It Is Due** When a TypeScript codebase is clean, readable, and well-structured, that reflects the quality of the engineers who wrote it. The type system helped. But the credit belongs to the people who decided what data should look like, wrote it down explicitly, and cared enough to do it right. That is worth acknowledging, because it means the skills that make TypeScript valuable, including clarity of thought, intentional design, and systematic reasoning about data, are the same skills that make you a good engineer regardless of the language you are working in.

Read the full article on Stackzilla →