Skip to content

TypeScript. A Language or a Sophisticated Linter?

Posted on:July 5, 2023

To delve into this discussion, it’s crucial to understand the role of a linter in the development process. A linter is a tool that analyzes source code to flag potential errors, enforce coding conventions, and ensure consistent style. Common examples include ESLint for JavaScript and TSLint, which was specifically designed for TypeScript but has been deprecated in favor of ESLint with TypeScript support.

The lines between TypeScript and traditional linters like ESLint can blur when considering their shared objectives. Both aim to make developers’ lives easier by automating the detection of common coding mistakes and enforcing best practices. TypeScript, however, takes this a step further with its compilation step, where TypeScript code is transformed into JavaScript.

Despite the compilation aspect, TypeScript’s true strength lies in its type checking capabilities. TypeScript introduces a static type system, allowing developers to define and enforce types for variables, functions, and other elements of their code. This type checking occurs during development, providing immediate feedback through red squiggly lines when expectations and assumptions around types are violated.

It’s important to recognize that TypeScript comprises two distinct parts: the compiler responsible for transpiling code and the type checker ensuring type safety. While the compiler transforms TypeScript into JavaScript, it’s the type checker that distinguishes TypeScript as a powerful language for catching potential issues early in the development process.

One might argue that TypeScript is both a compiler and a linter, making it challenging to neatly categorize. However, the value derived from TypeScript often stems from its role as a type checker rather than a transpiler. Developers can compile TypeScript code even if the types are incorrect, but the real benefit comes from the assurance provided by the type checker.

In essence, TypeScript’s unique identity arises from its dual nature – part compiler, part linter. While it might be technically accurate to label TypeScript as a language, the practical experience of developers aligns more closely with the features and feedback provided by the type checker, reinforcing the notion that TypeScript is, in many ways, a sophisticated linter.


In conclusion, whether one views TypeScript as a language or a linter may depend on the emphasis placed on its compilation versus type checking aspects. Nevertheless, its impact on development workflows and the confidence it instills in developers regarding type safety solidify TypeScript as an integral tool in modern web development.