Skip to main content

    Technologies / TypeScript

    TypeScript as the shared language of the stack.

    We default to TypeScript across the front end, the back end, and the shared contracts between them. It removes a category of bugs before they ship.

    TypeScript is the single technology choice that has changed how we deliver more than any other. Shared types between the API and the UI, refactors the compiler can catch, and codebases that scale to real team sizes without collapsing. We use TypeScript across React, Node, and the shared packages that bind them together.

    The problem we hear

    We use TypeScript where it earns its place. These are the situations we see most often.

    Frontend and backend disagree on the shape of data

    A field renames, and neither side notices until QA — or, worse, until production.

    Refactors are terrifying

    In a large JavaScript codebase, changing a signature is an act of faith. Grep and pray.

    TypeScript in name only

    A tsconfig with strict off, `any` everywhere, and no real type safety — the worst of both worlds.

    How we approach it

    01

    Understand

    We start with your business problem — the process, the users, the constraints — before naming any technology, including this one.

    02

    Architect

    A clear architecture decision record: where this technology fits, where it doesn't, and what it integrates with.

    03

    Build

    Small, demonstrable increments on real data. Real users, real feedback, real outcomes — not a proof of concept nobody uses.

    04

    Measure and hand over

    Operational metrics, documentation, and a runbook your internal team can operate. We're not a lock-in vendor.

    What good looks like

    One source of truth for API shapes, shared between front and back end.

    Refactors the compiler can verify — enabling large, confident changes to move quickly.

    Strict TypeScript with `any` treated as a code smell, not a fallback.

    Team ramp-up measured in days because the types describe the system.

    How we use TypeScript

    Full-stack TypeScript

    React on the front end, Node on the back end, and shared type packages between them.

    Monorepos

    Turborepo or Nx to organise multi-package estates, with a build cache that keeps CI fast.

    Type-safe APIs

    tRPC or codegen from OpenAPI/GraphQL so the client always knows the shape of the server.

    Migrations from JavaScript

    Incremental adoption in an existing JS codebase, module by module, without a big-bang rewrite.

    Strictness roadmaps

    Getting from 'TypeScript on' to genuinely strict TypeScript deliberately, without paralysing delivery.

    Type-first design

    Types as a design tool — expressing domain concepts, not just placating the compiler.

    Anonymised engagements

    Monorepo consolidation

    A B2B operator had four repositories drifting apart, sharing code by copy-paste. We consolidated to a Turborepo monorepo with shared types, shared UI, and a shared API client — cutting release effort and eliminating a class of integration bugs.

    Strictness migration

    A React estate had TypeScript on but strict off and `any` widespread. We ran a strictness migration in phases, ending with strict everywhere and a codebase that new hires could safely refactor from week one.

    Vignettes are anonymised composites drawn from engagements and product work. No client names, logos, or performance figures are implied.

    Frequently asked questions

    Is TypeScript worth it on small projects?

    Usually yes, once the project outgrows a single file. The tooling ceremony has become minimal.

    tRPC or GraphQL?

    tRPC when the UI and API are the same team's TypeScript codebase; GraphQL where multiple consumers or federation matter.

    How do you migrate from JavaScript?

    Rename to .ts, allow implicit any, tighten module by module. Never a big-bang rewrite.

    Do you use decorators, effects, or fancy type tricks?

    Only when they earn their place. Readable types beat clever ones.

    What about Deno or Bun?

    We use both in specific contexts (Supabase Edge, scripting, benchmarks). Node remains the default runtime for most work.

    Thinking about TypeScript?

    TypeScript isn't a project — it's a discipline. If you're wondering how much of your stack should be typed, let's have that conversation.

    Book Your Free Discovery Call