
- TypeScript - Home
- TypeScript - Roadmap
- TypeScript - Overview
- TypeScript - Environment Setup
- TypeScript - Basic Syntax
- TypeScript vs. JavaScript
- TypeScript - Features
- TypeScript - Variables
- TypeScript - let & const
- TypeScript - Operators
- TypeScript - Types
- TypeScript - Type Annotations
- TypeScript - Type Inference
- TypeScript - Numbers
- TypeScript - Strings
- TypeScript - Boolean
- TypeScript - Arrays
- TypeScript - Tuples
- TypeScript - Enums
- TypeScript - Any
- TypeScript - Never
- TypeScript - Union
- TypeScript - Literal Types
- TypeScript - Symbols
- TypeScript - null vs. undefined
- TypeScript - Type Aliases
- TypeScript Control Flow
- TypeScript - Decision Making
- TypeScript - If Statement
- TypeScript - If Else Statement
- TypeScript - Nested If Statements
- TypeScript - Switch Statement
- TypeScript - Loops
- TypeScript - For Loop
- TypeScript - While Loop
- TypeScript - Do While Loop
- TypeScript Functions
- TypeScript - Functions
- TypeScript - Function Types
- TypeScript - Optional Parameters
- TypeScript - Default Parameters
- TypeScript - Anonymous Functions
- TypeScript - Function Constructor
- TypeScript - Rest Parameter
- TypeScript - Parameter Destructuring
- TypeScript - Arrow Functions
- TypeScript Interfaces
- TypeScript - Interfaces
- TypeScript - Extending Interfaces
- TypeScript Classes and Objects
- TypeScript - Classes
- TypeScript - Objects
- TypeScript - Access Modifiers
- TypeScript - Readonly Properties
- TypeScript - Inheritance
- TypeScript - Static Methods and Properties
- TypeScript - Abstract Classes
- TypeScript - Accessors
- TypeScript - Duck-Typing
- TypeScript Advanced Types
- TypeScript - Intersection Types
- TypeScript - Type Guards
- TypeScript - Type Assertions
- TypeScript Type Manipulation
- TypeScript - Creating Types from Types
- TypeScript - Keyof Type Operator
- TypeScript - Typeof Type Operator
- TypeScript - Indexed Access Types
- TypeScript - Conditional Types
- TypeScript - Mapped Types
- TypeScript - Template Literal Types
- TypeScript Generics
- TypeScript - Generics
- TypeScript - Generic Constraints
- TypeScript - Generic Interfaces
- TypeScript - Generic Classes
- TypeScript Miscellaneous
- TypeScript - Triple-Slash Directives
- TypeScript - Namespaces
- TypeScript - Modules
- TypeScript - Ambients
- TypeScript - Decorators
- TypeScript - Type Compatibility
- TypeScript - Date Object
- TypeScript - Iterators and Generators
- TypeScript - Mixins
- TypeScript - Utility Types
- TypeScript - Boxing and Unboxing
- TypeScript - tsconfig.json
- From JavaScript To TypeScript
- TypeScript Useful Resources
- TypeScript - Quick Guide
- TypeScript - Cheatsheet
- TypeScript - Useful Resources
- TypeScript - Discussion
TypeScript - Literal Types
In TypeScript, literal types are subtypes of the primitive data types. The literal types allow you to specify the exact value the variable can contain.
There are three types of the literal types in TypeScript.
String literal types
Numeric literal types
Boolean literal types
Each of them allows you to store the specific value in the variable rather than storing the generalized string, numeric, or boolean value.
Syntax
You can follow the syntax below to use the literal types in TypeScript.
type lit_type = type_1 | type_2 | type_3 | ...
In the above syntax, 'type' is a keyword to create a type alias. The 'lit_type' is the name of the type. The 'type_1', 'type_2', and type_3' are values of type string, Boolean, or number.
String Literal Types
The string literal type allows you to define a set of specific values from which a variable or function parameter should contain any value.
Example
In the code below, we have created the 'Direction' type which contains all 4 directions in string format. The type of the move() function parameter is Direction so it accepts any value from the 4 directions.
If you try to pass any value other than 4 directions as an argument, it throws an error.
// Defining a custom-type Direction type Direction = "North" | "East" | "South" | "West"; // Defining a function move that takes a single argument of type Direction. function move(direction: Direction) { console.log(`Moving in the direction: ${direction}`); } move("North"); move("East"); // move("Northeast"); // Error: Argument of type '"Northeast"' is not assignable to parameter of type 'Direction'.
On compiling, it will generate the following JavaScript code.
// Defining a function move that takes a single argument of type Direction. function move(direction) { console.log(`Moving in the direction: ${direction}`); } move("North"); move("East"); // move("Northeast"); // Error: Argument of type '"Northeast"' is not assignable to parameter of type 'Direction'.
The output of the above code is as follows
Moving in the direction: North Moving in the direction: East
Numeric Literal Types
Numeric literal types are similar to string literals but allow you to specify exact numeric values as allowed types.
Example
In the code below, the 'SmallPrimes' type contains the small prime numbers till 11 as a value. The type of the 'prime' variable is 'SmallPrimes'. So, it can contain any value from 2, 3, 5, 7, or 11 only.
type SmallPrimes = 2 | 3 | 5 | 7 | 11; let prime: SmallPrimes; prime = 7; console.log(prime); // 7 // prime = 4; // Error: Type '4' is not assignable to type 'SmallPrimes'.
On compiling, it will generate the following JavaScript code.
let prime; prime = 7; console.log(prime); // 7 // prime = 4; // Error: Type '4' is not assignable to type 'SmallPrimes'.
The output of the above code is follows
7
Combined Literal Types
You can combine different types of literals (string, numeric, boolean) using union types to allow a variable to hold a set of specified values.
Example
In the code below, the 'MixedLiterals' type contains the click, 404, and true values.
The action variable can contain any singl value from the 3 values of the 'MixedLiterals' type.
// Mixed type literals type MixedLiterals = "Click" | 404 | true; let action: MixedLiterals; action = "Click"; // Valid console.log(action); action = 404; // Valid console.log(action); action = true; // Valid console.log(action); // action = "Other"; // Error: Type '"Other"' is not assignable to type 'MixedLiterals'.
On compiling, it will generate the following JavaScript code.
let action; action = "Click"; // Valid console.log(action); action = 404; // Valid console.log(action); action = true; // Valid console.log(action); // action = "Other"; // Error: Type '"Other"' is not assignable to type 'MixedLiterals'.
The output of the above code is as follows
Click 404 true
Use Cases for Literal Types
There are multiple use cases of literal types. However, we will look into some real-time use cases of the literal types.
Configuration − It is used to define the particular configuration of variables or function parameters that take only specific values.
State Management − Type literals can be used for state management.
API Response Handling − It is used to handle the API response based on the API response status.
Literal types in TypeScript enhance the type safety of your applications by allowing you to specify exactly what values are acceptable. It also helps developers maintain the code complexity and improve the readability.