← Concepts

Literal Types

In TypeScript, literal types let you create types that express specific values.

For instance, let's say you only wanted to accept success or failure in a function argument. You could use string:

function printStatus(status: string) {
  console.log(`Status is: ${status}`);
}

printStatus("error"); // No type error!

But as you can see, we can call printStatus with any string value, which is not what we want.

Instead, we can use a literal type:

function printStatus(
  status: "success" | "failure"
) {
  console.log(`Status is: ${status}`);
}

printStatus("success"); // Outputs: Status is: success
printStatus("error"); // Type error!

Now, we can only call printStatus with the values success or failure.

We can also use literal types with other basic types:

// Numeric literals
type ValidIndexes = 1 | 2 | 3 | 4 | 5;

// Boolean literals
type SuccessState = {
  success: true;
  data: string;
};

type FailureState = {
  success: false;
  error: string;
};

In the example above, ValidIndexes can only be 1, 2, 3, 4, or 5. SuccessState can only be { success: true, data: string }, and FailureState can only be { success: false, error: string }.