State of TypeScript Linting 2025 | Joshua Goldberg | Ep 29B

TypeScript.fm - The Friendly Show for TypeScript Developers - A podcast by Kamran Ayub and Erik Onarheim - Tuesdays

Categories:

Joshua Goldberg (JoshuaKGoldberg.com), creator of typescript-eslint, joins us to discuss the state of linting TypeScript projects in 2025. Which linters should we pay attention to? Why are there so many? What's unique about TypeScript? Josh shares his perspective and covers what to look for in a linter and how best to utilize them in your projects.Chapters(00:00) - Introducing Josh Goldberg (02:10) - Why Are There So Many Linters? (02:48) - Why Do I Need a Linter With TypeScript, Anyway? (04:13) - Landscape of Linters in 2025 (06:56) - How Does TypeScript Linting Actually Work? (08:15) - Creating Type-aware Native Speed Linters (11:06) - What Would the Ideal Linter Look Like? (12:48) - Where is the Bottleneck in Type-aware Linting? (15:15) - Are Native Speed Linters the Answer? (21:03) - Okay, So Which Linter Should I Use? (23:33) - Are There Some Golden Type-aware Rules to Use? (24:44) - Customizing Your Linting Setup (27:05) - Writing Your Own Custom Lint Rules (31:08) - Josh's Recommended ESLint Plugins (34:15) - Future of Linting with Flint (36:37) - Attend SquiggleConf 2025 in Boston Linterstypescript-eslint (stable) – TypeScript, most type-aware lint rulesoxlint (stable) – Rust, no type-aware lint rulesBiome (stable) – Rust, limited type-aware lint rules in V2tsslint (stable) – TypeScript, integrates with tsserver, custom rules with TS compiler APItsl (new) – tsc plugin that ports a selection of typescript-eslint type-aware lint rulesDeno lint (stable) – Rust, subset of ESLint rules, no type-aware lint rulesFlint (unstable) – TypeScript, Josh’s fast, friendly linter, still in developmenttsgolint (prototype) – Go, proof-of-concept experimental TypeScript Native integrationResourcesLearn: Vanilla TypeScript ExperienceLearn: ASTs and typescript-eslintLearn: If I Wrote a Linter, Part 4: Summary Learn: TypedRocks Builds a Type-aware ESLint PluginDustinSpecker/awesome-eslint – a list of awesome ESLint plugins and resourcesJoshuaKGoldberg/create-typescript-app – pick and choose the rules you likeESLint now supports linting for Markdown and CSSJosh’s Favorite Rules and Plugins:typescript-eslint/no-floating-promises – to avoid non-awaited Promisestypescript-eslint/no-deprecated – to avoid calling deprecated APIseslint-plugin-regex – to catch ReDOS vulnerabilitieseslint-plugin-n – for Node.js projectseslint-plugin-jsdoc – for the “informative docs” ruleeslint-plugin-erasable-syntax-only – to enforce erasable syntax in your TS project (prior to TS 5.8)eslint-plugin-package-json – lint your package.json fileWhere to Find JoshJoshuaKGoldberg.comFlint DiscordJosh on BlueSkyJosh on FosstodonJosh on GitHub