Last updated: September 19, 2026
By Tom Kenaley, President and Senior Partner, KORE1
A TypeScript developer job description works when it tells candidates where the code runs, which TypeScript and Node.js versions ship to production, how strict the compiler settings are, and what the base salary is. Pay is the one most postings get right, often because a state law made them. Call it $115,000 to $150,000 base for a mid-level engineer this year. Senior picks up where that stops and tops out near $195,000. The other three get skipped.
“Is strict on?”
Three of the first four senior candidates asked that on their first call with a commercial insurance carrier in Columbus, Ohio, this spring. Nobody on the hiring side could answer. The recruiter didn’t know what it meant. Their engineering manager checked. That took a day, because the answer lived in a config file nobody had opened since 2021.
The posting was the usual thing. “Senior TypeScript Developer,” and under it React, Angular, Vue, Node.js, NestJS, GraphQL, AWS, “5+ years of TypeScript,” and “strong typing skills.” It pulled 260 applications. Most came from React developers. The carrier doesn’t run React anywhere.
What they actually had was an Angular portal that independent agents use to quote small-business policies. About a third of it was still plain JavaScript, compiled alongside the TypeScript under allowJs. Strict mode was off. When the manager finally searched the repo for explicit any, it came back with roughly 1,900 hits. Nineteen hundred. Behind the portal sat a small Node.js service that stitched the rating and policy APIs together, and it ran on Node 20, which lost security support on April 30. Four facts. None of them were in the posting, and every one of them was something a good senior candidate wanted to know before giving up an afternoon to a panel.
We rewrote it with the manager in about forty minutes. The title became “Senior Frontend Engineer, Angular and TypeScript.” The second paragraph said, more or less, that a third of the portal is still JavaScript, strict is off, turning it on one folder at a time is most of year one, and the Node service moves to Node 24 before the end of the year. React came out. Vue too, and the years line with them. Applications dropped to 64. The manager panicked a little. Then the first-round calls began going twenty minutes over, with candidates arguing about which folders to convert first, and the carrier hired an engineer from an Indianapolis health insurer’s member portal team 19 days after the repost, at $162,000 base.

Where I sit, so you can discount accordingly. Our fee comes from the employer, and only after a candidate we sent gets hired, which covers every search our TypeScript developer staffing desk runs. So a req written well enough that the right engineer applies without us is, strictly speaking, bad for business. Oh well. Teams that write honest reqs tend to call us for the next hard one, and the next one is always harder.
Browser Code, Server Code, or Library Code
A TypeScript developer builds software in TypeScript, the typed layer Microsoft built on top of JavaScript, whose types get compiled or stripped away before the code runs in a browser or on Node.js. The work might be a user interface, a server API, or the shared types and tooling other teams import. The title alone doesn’t say which.
And the title is everywhere now. GitHub’s Octoverse 2025 report found that in August 2025 TypeScript passed Python and JavaScript to become the most-used language on the platform by monthly contributors, 2,636,006 of them, up 66.6% in a year. Big number. GitHub’s explanation was mostly mundane. Nearly every major frontend framework now scaffolds new projects in TypeScript by default, so people end up writing it whether they picked it or not. The State of JavaScript 2025 survey found that 40% of its 10,934 respondents write only TypeScript and 6% write only plain JavaScript, and in the Stack Overflow 2025 Developer Survey 48.8% of professional developers said they’d done extensive work in it over the past year.
Great for the language. Awful for a job board. A posting headed “TypeScript Developer” and nothing else is addressed to half the profession.
So settle where this person’s code runs before you write anything else. It’s the line that changes who applies.
| Where the code runs | Title that pulls the right people | Put these in the posting | Can usually come off |
|---|---|---|---|
| In the browser (product UI) | Senior Frontend Engineer, React and TypeScript, or Frontend Engineer, Angular | The framework and its major version, the data and state libraries (TanStack Query, NgRx), Vitest or Playwright | NestJS, database names, “full stack” |
| On a Node.js server | Backend Engineer, Node.js and TypeScript | The Node major version, the framework (NestJS, Fastify, Express, or Hono), PostgreSQL with Prisma or Drizzle, the queue | CSS, design systems, React |
| Both ends of one product | Full-Stack Engineer, TypeScript (Next.js) | How types cross the wire (tRPC, GraphQL codegen, or OpenAPI-generated clients), and the monorepo tool | A separate framework wish list for each side |
| Inside other teams’ code (shared packages, SDKs, build tooling) | Staff Engineer, TypeScript Platform, or Developer Experience Engineer | Who imports the packages, the base tsconfig they’d maintain, the build (tsc, esbuild, or Vite), how releases get versioned | Feature roadmaps, “fast-paced product team” |
We’ve already written separate postings for the first three, and each one goes deeper than this page can. A pure UI seat is better served by the frontend developer job description template, a services seat by the backend developer job description with TypeScript named in the stack line, and a both-ends seat by a full-stack developer posting that happens to be all TypeScript. The fourth row has no template of its own on our site, and the ones I’ve found elsewhere read like a frontend posting with a new title stapled on. It’s also the row people most often mislabel as “senior frontend,” and then wonder why the candidates keep asking about CSS. If you haven’t decided which search you’re running at all, Devin Hornick’s piece on how to hire TypeScript developers splits the market three ways and spends real time on type-system depth. I won’t repeat it.
TypeScript 6, TypeScript 7, and the Node Version Underneath
This part of a posting changed more in the last six months than in the five years before.
Microsoft shipped TypeScript 6.0 on March 23, 2026, and called it the last release built on the original JavaScript codebase. It also flipped some defaults. A tsconfig that says nothing about those settings now gets strict turned on, module set to esnext, and an empty types list. Then TypeScript 7.0 landed on July 8, a port of the compiler to Go, and Microsoft’s release notes report full builds running 8 to 12 times faster. Type-checking the VS Code codebase went from 125.7 seconds to 10.6.
That’s the headline. For a job posting, the footnote matters more. TypeScript 7.0 ships without a programmatic API, and Microsoft expects a new one in 7.1, so anything that drives the compiler from inside another tool has to wait. The notes say workflows built on Vue, Svelte, Astro, and MDX likely can’t use 7 yet, and neither can Angular’s template type-checking. In the meantime there’s a compatibility package, @typescript/typescript6, which installs a tsc6 command so both compilers can live in one repository.
So plenty of teams are running two compilers this fall. Normal, even. Say so.
A payments company in Omaha did exactly that in August. Their monorepo held 14 packages under Turborepo, and the type-check step in CI had crept to about nine minutes, which is long enough that engineers push a branch and go get lunch. Some did. They moved the type-check to TypeScript 7. Under a minute. The production bundle still went through a webpack loader that needs the old API, so TypeScript 6 stayed installed beside it through the compatibility package. The line we added to their senior posting read “TypeScript 7 for type-checking in CI. TypeScript 6 for the webpack build until 7.1 ships its API. Node 22 in production, Node 24 by January.” Two of the four engineers we submitted brought that line up before we did. Good sign. One of them had already run the same split at a farm-equipment lender in Lincoln and knew where the loader would complain. She took the job at $171,000.

Then there’s the runtime, which is easier to date than the compiler because Node publishes its support calendar years ahead. According to the Node.js release schedule, Node 20 reached end of life on April 30, 2026. Node 22 is in maintenance until April 30, 2027. Node 24 is the active long-term support line until October 20, when it drops to maintenance, and Node 26, current since May, becomes the new LTS line on October 28. Plan around those.
Recent Node will also run TypeScript files directly. The Node.js TypeScript documentation lists type stripping as on by default since versions 22.18.0 and 23.6.0, and stable since 24.12.0. Two catches, and anyone who has used it knows both. Node doesn’t type-check anything. It replaces the types with whitespace and runs what’s left. That’s it. It also ignores tsconfig.json completely, and code that leans on enums, namespaces with runtime code, or constructor parameter properties won’t run that way without changes. That’s why some teams turn on erasableSyntaxOnly, a compiler option added in TypeScript 5.8, and quietly retire their enums.
| What the posting says | What a senior candidate hears |
|---|---|
| No version at all, or “TypeScript 5.x” | Nobody checked before the req went up |
| “TypeScript 6.0, strict on” | Current, deliberate, and probably eyeing 7 |
| “TypeScript 7 in CI, 6 for the build until 7.1” | A team that reads release notes and already has a plan |
| “Node 20 in production” | Unpatched since April 30, so the upgrade is part of the job whether the posting admits it or not |
| “Node 24, moving to 26 after it goes LTS” | A normal shop with a calendar |
| “We run .ts files directly on Node and type-check in CI” | They dropped a build step on purpose, and the first interview question will be about enums |
Strict Is the Default Now. Is Your Codebase?
Since 6.0 made strict the default, there are only two ways it can still be off. Somebody set it to false in tsconfig.json, or the team hasn’t upgraded past 5.x, where leaving it out meant off. A senior candidate will ask which. Early.
The flag is the start of the answer, not all of it. strict bundles a family of checks, null checking and implicit any among them, but it leaves out settings that careful teams turn on separately. noUncheckedIndexedAccess is the one I hear about most, since it makes the compiler admit that items[5] might come back undefined, and it isn’t part of the strict family at all. Then there’s everything the config file can’t show. How much of the codebase is still JavaScript. How many explicit any types are sitting in it. Whether @ts-ignore is banned in favor of @ts-expect-error, which at least complains once the error it was hiding goes away, so the suppressions don’t quietly outlive their reason.
Put the real numbers in the posting. I mean that literally. “About a third JavaScript, strict off, roughly 1,900 explicit any, and turning strict on by folder is the main project this year” reads like a confession. It works like a filter. Engineers who enjoy that kind of cleanup lean in, and the ones who’d be miserable doing it for a year opt out before your panel spends four hours finding out the hard way.

The opposite mistake costs more. A posting that promises “a modern, fully typed codebase” tends to lose its best candidate in round two, when someone opens the repo during a pairing exercise and the first file starts with // @ts-nocheck. Few withdraw on the spot.
They just stop answering.
One more line people skip, and it’s short. TypeScript’s types vanish when the code runs, so they can’t check what arrives over the network. Say what does. A schema library like Zod, Valibot, or ArkType at the edges, clients generated from an OpenAPI spec, tRPC between a Next.js front end and its server, or honestly nothing yet. “Nothing yet” is a legitimate answer, and it tells a candidate a lot about how the first quarter will go. Our TypeScript developer interview questions cover the follow-ups for when a candidate raises it. The good ones will.
What Each Level Earns and Should Be Able to Explain
Federal wage data doesn’t break out TypeScript developers. Software developers are the nearest line, and the Bureau of Labor Statistics May 2025 wage profile for software developers puts the 10th percentile at $82,460 and the 90th at $214,670, with a mean of $148,100 across 1,687,890 jobs. That spread runs from about our junior floor to the lower half of our staff row. Suspiciously tidy. It holds up against what we actually close, though.
| Level | U.S. base salary, 2026 | A decision they should be able to walk you through |
|---|---|---|
| Junior, first 2 years or so | $80,000 to $110,000 | Why a function they wrote returns unknown instead of any, and what the caller has to do about it |
| Mid-level, 3 to 5 years in | $115,000 to $150,000 | A compiler flag they pushed to turn on for their part of the codebase, and what it caught in the first week |
| Senior, usually 6 or more years in | $150,000 to $195,000 | A strictness or version upgrade they rolled across a whole service without stopping feature work |
| Staff or lead, typically 10+ years | $190,000 to $250,000 | The shared types, base tsconfig, or build setup other teams now depend on, and one call about it they’d reverse |
Gregg Flecke’s TypeScript developer salary guide is where those bands come from, and it goes further, with pay by city, pay by framework, and what equity does to a package at the companies that hand it out. Bay Area and Seattle offers sit near the top of each row. Remote-first companies in the middle of the country sit closer to the bottom. If you’re hiring in one particular city, run it through our salary benchmark assistant, which costs nothing and beats any table I could fit on this page. Takes a minute.
That right-hand column is meant to replace the years line. “Five-plus years of TypeScript” can’t tell a staff engineer who designed a company’s shared type packages apart from somebody who has been adding prop types to React components since 2021. The decision can. Ask for it in the posting, then ask again on the first call and see whether the story holds together.
Migration work often goes better as a contract. The same salary guide puts senior full-stack TypeScript contractors at $110 to $165 an hour and platform specialists at $150 to $225. Pricey? A contractor who has already taken a large codebase to strict usually finishes well before a new hire who’s learning your repo and the migration at the same time.
Then publish the range. Virginia is the newest reason. The state’s pay transparency law took effect July 1, 2026, and the Virginia Department of Labor and Industry put it plainly in its guidance that day. A job posting or hiring ad in Virginia needs a wage or salary range. Asking what an applicant used to earn is out. Roughly 70% of the TypeScript seats we fill are remote. A remote posting open to candidates in Virginia is one I’d treat as covered until your employment counsel says otherwise. The legal reason is the smaller one, honestly. A senior engineer with two recruiters already in the inbox skips the posting that makes them ask.
TypeScript Developer Job Description Template
Fill the square brackets with your team’s real answers. Parenthetical notes are instructions for you, so strip them out before anything gets published. A blank you can’t fill is worth a message to whoever owns the build, since the candidate is going to ask it anyway.
Job Title
[Senior Frontend Engineer, React and TypeScript / Backend Engineer, Node.js and TypeScript / Full-Stack Engineer, TypeScript (Next.js) / Staff Engineer, TypeScript Platform] (Pick one. The layer word does the filtering. TypeScript stays in so keyword searches still find the posting.)
About the Role
[Company] builds [product] for [customers], and this engineer will own [the agent portal / the payments API / the shared UI and types packages] on a team of [N]. The reporting line is [role], and the people you’ll work with most are [design / the API team / every product team that imports your packages].
Compiler, Runtime, and Build
- TypeScript [6.0 / 7.0 / 7.0 for type-checking with 6.0 for the build], [plus the upgrade plan, if there is one]
strict[on / off / being turned on folder by folder], with [noUncheckedIndexedAccess/exactOptionalPropertyTypes/ nothing beyond strict]- [None / about (X) percent] of the code still JavaScript under
allowJs, and [roughly (N) / almost no] explicitany - Node.js [22 / 24 / 26], [compiled with tsc / bundled with esbuild or Vite / running .ts files directly with type stripping]
- [React / Next.js / Angular / Vue] [major version] in the browser, [NestJS / Fastify / Express / Hono] on the server
- Data from the network checked by [Zod / Valibot / generated OpenAPI clients / tRPC / nothing yet]
- Tests in [Vitest / Jest], end to end in [Playwright / Cypress], lint and format with [ESLint and Prettier / Biome]
- [One app / a monorepo on Turborepo, Nx, or pnpm workspaces with (N) packages], deployed through [GitHub Actions / GitLab CI] about [N] times a [day / week]
What You’ll Own
- [Named product area or package] from design review to production, including the types other code depends on
- Code review for a team of [N], including the pull requests that loosen a type to get a build green
- [Migration seats: moving (area) from JavaScript to strict TypeScript, roughly (X) days a week, alongside feature work]
- [Upgrade seats: the Node 20 to 24 move by (date), or the switch to TypeScript 7 once (tool) supports it]
- [Platform seats: the base tsconfig, shared lint rules, and build pipeline that (N) teams import]
- [On-call: one week in (N) / business hours only]
What You Bring
- Production TypeScript or JavaScript for [three / six] years or more, with at least one [UI / service / package] you kept owning after it launched
- Working depth in [the framework named above], at or near the version we run
- Types you design rather than annotate. Unions that make a bad state impossible to express, generics with real constraints, and an opinion on when
unknownbeatsany. - [Node seats: a working model of the event loop and what blocks it]
- [Migration seats: a codebase you moved toward strict, and what you’d sequence differently next time]
- One compiler setting you’d fight to keep and one you think is overrated. (Leave this in. People’s answers say more than a years count.)
Nice to Have
- Time in [industry] (Keep this only when the domain takes months to pick up, like commercial insurance rating or card-network rules.)
- A TypeScript or Node major-version upgrade you shipped [if yours is coming]
- Contributions to DefinitelyTyped or a typed open-source library (Nice to see. Don’t require it.)
- [Monorepo seats: build caching in Turborepo or Nx that you set up or fixed]
Base Pay, Benefits, and Location
We’ll pay a base salary between [$low] and [$high]. On top of that comes [an annual bonus of about (N) percent / an equity grant / nothing extra], and the benefits are [health, retirement, and time off in one sentence]. You’d work [remotely from anywhere in the U.S. / in the (city) office for (N) set days each week / full time at our (city) site]. [If there’s a pager rotation, how often it comes around and how noisy it is.] (Take the range from the salary table above. Virginia and a growing list of states require one in the posting, and candidates skip postings without it.)
Notes We Leave in the Margins of TypeScript Reqs
So what does a TypeScript developer spend the week on?
Most of the week goes to building and maintaining web interfaces, Node.js services, or shared packages in TypeScript, along with the code reviews, tests, and type fixes that keep the compiler’s checks meaningful.
Which of those three depends on the seat, and it’s the first thing to settle. A frontend engineer’s week is components and data fetching. A platform engineer’s week is mostly other people’s build failures. Very different weeks.
Is “5+ years of TypeScript” a reasonable requirement?
Wrong unit, mostly, because a count of TypeScript years can’t separate someone who designs types from someone who has typed React props for five years without ever touching a tsconfig.
TypeScript has been public since 2012, and plenty of excellent engineers picked it up late after a decade of JavaScript. Ask for the decision from the salary table instead. If your applicant tracking system insists on a number, “several years of production JavaScript or TypeScript” is honest, and it doesn’t screen out the people who’ve done the migrations you need done.
Do we need to be on TypeScript 7 before we hire?
Short answer, no, because senior candidates care far more that a team knows which TypeScript version it runs and why than whether it’s already on 7.0.
Angular shops in particular can’t move all the way yet, since Microsoft’s own release notes say Angular’s template type-checking likely won’t use TypeScript 7 until the new API arrives in 7.1. The version question is worth answering in the posting, and it’s one of the first lines our Angular developer staffing recruiters would ask you to add. Write down the version you’re on, and the plan if there is one. A candidate will respect “6.0, waiting on Angular” a lot more than silence.
Can one posting cover React on the front end and Node on the back?
Only if one person really does both every week, in which case call it full-stack and name both frameworks, because a posting split across two jobs pulls two different pools and satisfies neither of them.
Next.js muddies this. Server components put backend work inside a frontend framework, and a lot of teams honestly can’t say where one ends. Not a problem. Say roughly what share of the week is UI and what share is API, and let candidates tell you in the screen whether the split sounds right to them.
$150K for a senior TypeScript engineer, is that enough?
$150,000 is the bottom of the senior range this year, so it can work in a lower-cost market and runs thin anywhere a Bay Area or Seattle offer is also on the table.
Our salary guide puts senior base at $150,000 to $195,000. Staff and lead engineers who own the shared types and the build start around $190,000. Employers that grant real equity push total compensation well past all of those numbers, and for a remote seat, they’re who you’re bidding against.
Should a TypeScript posting mention JavaScript at all?
Keep JavaScript in the body and out of the title, since plenty of strong TypeScript engineers still search job boards by the older word, and the runtime underneath is JavaScript either way.
Where JavaScript earns a real line is a migration seat. “About a third of the code is still JavaScript” is probably the most useful sentence a migration posting can contain. It’s also the one hiring managers most want to delete. Don’t.
Start With the tsconfig, Not the Job Description
When a TypeScript req comes to us, the first thing we ask for isn’t the job description. It’s the tsconfig.json. Five minutes with it tells us the TypeScript version, how strict the team really is, what the build targets, and whether anyone has touched it since the last reorg. It tells a candidate the same things, which is why a few of our clients now share it in the first interview on purpose. The engineers who read it and come back with questions are nearly always the ones worth a second round.
Some of this work has an end date. Getting a codebase to strict, or moving four services off Node 20, is a project, and projects are what contract staffing is for. The person who’ll own the type strategy after the project wraps is a different hire, usually a direct hire, and running both searches at once is perfectly normal. If the seat is mostly server work, our Node.js developer staffing recruiters run it on their own bench.
Our numbers, briefly. TypeScript searches on our desk have averaged 17 days from req to hire, and when we check back a year after a placement, 92% are still in the seat. If you’ve got a TypeScript req in draft, send it to our team with the tsconfig attached. It’ll get the same treatment the Columbus posting got.

