Skip to content
Preptima

Node.js and TypeScript on the server

Node.js runs JavaScript on the server on a single-threaded event loop, and TypeScript is now how almost everyone writes it. The draw is one language across the whole stack; the price is that CPU-bound work has to be deliberately pushed somewhere else.

Very high demand20 min readBackend engineer (Node.js), Full-stack engineer (TypeScript), API engineer, Serverless and functions developer, Build, tooling and developer-experience engineer, Real-time systems engineerUpdated 2026-07-27

Assumes you know: JavaScript fundamentals, particularly closures, promises and prototypes, HTTP, status codes and what a REST endpoint is, Enough SQL to read and write a join, Comfort with npm and a terminal

Overview

What this area actually covers

Node.js is a server-side runtime built on V8, Chrome's JavaScript engine, wrapped in libuv, a C library that provides asynchronous file and network input/output. It gives you one thread running your JavaScript, a queue of completed operations waiting to have their callbacks run, and a small pool of background threads for the things the operating system cannot do asynchronously. TypeScript is a superset of JavaScript that adds a static type system, checks it at compile time, and then erases it entirely — the types do not exist at runtime.

The area therefore covers three things that are genuinely distinct. First the runtime: the event loop, streams, buffers, modules, processes and memory limits. Second the type system: structural typing, generics, narrowing, and how much of your domain you can encode in types. Third the ecosystem you build services out of, which in practice means Express or Fastify or NestJS, an ORM such as Prisma or Drizzle or TypeORM, a validation library such as Zod, and a test runner.

The relationship between the first two is the thing to understand before anything else, because it explains most of the confusion in this ecosystem. TypeScript knows nothing about Node and Node knows nothing about TypeScript. One is a compile-time checker that produces JavaScript; the other is a runtime that executes JavaScript. Everything awkward about the tooling — the build step, the source maps, the declaration files, the mismatch between what the checker believes and what arrives over the network — follows from those two facts sitting next to each other without a connection.

What people wrongly bundle in is the browser. Knowing React does not mean knowing Node, and the overlap is smaller than the shared syntax suggests: no DOM, no bundle-size anxiety, but instead process lifetime, connection pools, file descriptors and a heap that has to survive for weeks. The other thing wrongly bundled in is npm as a skill. Everyone can install a package. Understanding what happens when two packages want different versions of the same transitive dependency is a different matter.

Where to go next

Now practise it

15 interview questions in Node.js & TypeScript, each with the rubric the interviewer is scoring against.

All Node.js questions
nodejstypescriptevent-loopbackendjavascript