TypeScript 6.0 shipped earlier this year as the final JS-based release of the compiler. TypeScript 7.0 follows with a set of breaking changes that have been telegraphed through deprecation warnings in 6.x. If you haven't started addressing those warnings, now is the time.
What's Changing in TypeScript 6.0
TypeScript 6.0 marks the transition of the compiler toolchain away from its original JavaScript codebase. The user-facing effect: deprecation warnings on options that won't exist in 7.0.
If your project uses any of these in tsconfig.json, you'll see warnings today:
{
"compilerOptions": {
"target": "es5", // deprecated → remove or upgrade
"baseUrl": "./src", // deprecated → use paths instead
"moduleResolution": "node" // deprecated → use bundler or node16
}
}Treating these as errors now is the most efficient path to 7.0 readiness.
TypeScript 7.0 Breaking Changes
--strict becomes the default
In TypeScript 7.0, --strict will be enabled by default. Projects running without it today will fail to compile unless they address all strict-mode violations before upgrading.
The most common violations you'll encounter:
// noImplicitAny — type annotation required
function transform(data) { // Error: Parameter 'data' implicitly has an 'any' type.
return data.value;
}
// strictNullChecks — null/undefined must be handled explicitly
function getTitle(post: { title?: string }): string {
return post.title; // Error: 'string | undefined' is not assignable to 'string'
}
// Fixed
function getTitle(post: { title?: string }): string {
return post.title ?? 'Untitled';
}Run npx tsc --strict --noEmit on your project to get a count of existing violations. Knowing the number now is better than discovering it when 7.0 ships.
--target es5 removed
TypeScript 7.0 drops ES5 compilation. If your project still targets ES5 for IE11 compatibility, you have three options:
- Drop IE11 support — the practical choice for most projects in 2026
- Use Babel for ES5 transpilation alongside TypeScript for type checking only
- Remain on TypeScript 6.x
// Update your target
{
"compilerOptions": {
"target": "es2020" // or es2022, esnext
}
}--baseUrl removed
baseUrl-based module resolution is gone in 7.0. Replace it with paths:
// Before (6.x and earlier)
{
"compilerOptions": {
"baseUrl": "./src"
}
}
// import { api } from 'api'; resolves to ./src/api.ts
// After (7.0 compatible)
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
}
}
// import { api } from '@/api'; resolves to ./src/api.tsAlign this with your bundler's alias configuration — Vite's resolve.alias, Next.js's @/* convention — for consistency across the stack.
--moduleResolution node10 removed
The legacy node (also called node10) module resolution strategy is removed. Switch to bundler for projects using a modern bundler:
// For projects using Vite, esbuild, webpack, or similar
{
"compilerOptions": {
"module": "ESNext",
"moduleResolution": "bundler"
}
}
// For Node.js projects without a bundler
{
"compilerOptions": {
"moduleResolution": "node16"
}
}Migration Checklist
Phase 1 — Fix 6.x deprecation warnings
- Replace
baseUrlwith explicitpathsmappings - Update
moduleResolutiontobundlerornode16 - Upgrade
targetto at minimumes2020
Phase 2 — Address strict violations
- Run
npx tsc --strict --noEmitand record the count - Fix
noImplicitAnyviolations first — they have the widest blast radius - Consider
ts-strict-pluginfor gradual adoption in large codebases
Phase 3 — Validate dependencies
- Confirm key dependencies have TypeScript 7.0-compatible type definitions
- Watch for library-specific tsconfig recommendations that need updating
Bottom Line
TypeScript 7.0's changes clean up a decade of accumulated backward compatibility. The migration cost is proportional to how much technical debt your tsconfig.json carries. Starting with the 6.x deprecation warnings and treating them as errors is the lowest-friction path to 7.0 readiness.
The --strict migration is the most time-intensive part for large codebases. Starting that work now, before 7.0 ships, is the best way to avoid a forced crunch later.