When working with TypeScript, it’s crucial to understand the difference between undefined and null. Both undefined and null are used to represent the absence of a value, but they have distinct meanings and behaviors.
In this tutorial, we’ll dive deep into the difference between undefined and null in TypeScript, explore their use cases, and provide practical examples to help you master these essential concepts.
Undefined and Null In TypeScript
Now, let’s understand the key difference between undefined and null in TypeScript. Below, I have explained in detail each of them.
Understand Undefined in TypeScript
In TypeScript, undefined is a primitive value that indicates the absence of a value or a variable that has been declared but not initialized. When a variable is declared without an initial value, it is automatically assigned the value of undefined. Here’s an example:
let myVariable: string;
console.log(myVariable); // Output: undefinedIn the above code, myVariable is declared without an initial value, so it defaults to undefined.

It’s important to note that accessing an undefined variable or property will not throw an error. Instead, it will simply return undefined. However, attempting to access a property or method of an undefined value will result in a runtime error.
let myObject: any;
console.log(myObject.property); // Output: TypeError: Cannot read property 'property' of undefinedTo avoid such errors, it’s recommended to check for undefined them before accessing properties or methods of a variable.

Understand Null in TypeScript
On the other hand, null is a primitive value that represents the intentional absence of any object value. It is typically used to indicate that a variable or property should have no value.
let myVariable: string | null = null;
console.log(myVariable); // Output: nullIn the above example, myVariable is explicitly assigned the value of null, indicating that it intentionally has no value.

Unlike undefined, null is not automatically assigned to variables. The programmer must explicitly assign it.
Strict Null Checks Using TypeScript
TypeScript provides a configuration option called “strictNullChecks” that enables strict null checking. When enabled, the TypeScript compiler will raise an error if you attempt to assign undefined or null to a variable that doesn’t explicitly allow those values.
// tsconfig.json
{
"compilerOptions": {
"strictNullChecks": true
}
}// Example with strictNullChecks enabled
let myVariable: string = undefined; // Error: Type 'undefined' is not assignable to type 'string'Enabling strict null checks can catch potential null or undefined-related errors at compile time, leading to more robust and error-free code.

Type Checking and Type Guards in TypeScript
TypeScript provides type checking and type guards to handle undefined and null values effectively. You can use the typeof operator to check the type of a variable and perform conditional logic based on the result.
function processValue(value: string | undefined) {
if (typeof value === 'undefined') {
console.log('Value is undefined');
} else {
console.log('Value is:', value);
}
}
processValue(undefined); // Output: Value is undefined
processValue('Hello'); // Output: Value is: HelloThe above TypeScript function accepts a value that can be either a string or undefined. It checks if the value is undefined and logs a specific message; otherwise, it logs the string value. This ensures safe handling of optional values when strictNullChecks is enabled.

Additionally, TypeScript supports the use of optional chaining (?.) and nullish coalescing (??) operators to safely access properties and provide default values, respectively.
let myObject: { name: string | undefined } = { name: undefined };
console.log(myObject?.name); // Output: undefined (no error)
let myVariable: string | null = null;
console.log(myVariable ?? 'Default Value'); // Output: Default ValueThe above TypeScript code defines an object with a property name that can be either a string or undefined, and safely accesses it using optional chaining, which prevents errors if the property is missing.
It also shows a variable that can be a string or null, using the nullish coalescing operator (??) to provide a default value when the variable is null or undefined. Together, these features help write safer code by handling optional or missing values gracefully without causing runtime errors.

Best Practices
When working with undefined and null in TypeScript, consider the following best practices:
- Use undefined to represent uninitialized or missing values.
- Use null to explicitly indicate the intentional absence of a value.
- Enable strict null checks in your TypeScript configuration for better type safety.
- Use type guards and conditional checks to handle
undefinedandnullvalues gracefully. - Utilize optional chaining and nullish coalescing operators when appropriate.
Summary
| Concept | Description |
|---|---|
| undefined | Represents the absence of a value or an uninitialized variable |
| null | Represents the intentional absence of an object value |
| Strict Null Checks | TypeScript configuration to enable strict null checking |
| Type Checking | Using typeof operator to check the type of a variable |
| Optional Chaining | Safely accessing properties of potentially undefined values |
| Nullish Coalescing | Providing default values for null or undefined expressions |
Conclusion
Understanding the difference between undefined and null is essential for writing clean and error-free TypeScript code. You can effectively handle undefined and null values by leveraging TypeScript’s type system, strict null checks, and operators like optional chaining and nullish coalescing.
Remember to use undefined for uninitialized or missing values and null for intentionally absent values. Following best practices and utilizing TypeScript’s features will help you write more robust and maintainable code.
You may like to read:
- How to Use the Double Question Mark (??) Operator in TypeScript?
- Property Does Not Exist on Type Error in TypeScript
- How to Check the Type of a Variable in TypeScript?
- Avoid Duplicate Enum Values in TypeScript

I am Bijay Kumar, a Microsoft MVP in SharePoint. Apart from SharePoint, I started working on Python, Machine learning, and artificial intelligence for the last 5 years. During this time I got expertise in various Python libraries also like Tkinter, Pandas, NumPy, Turtle, Django, Matplotlib, Tensorflow, Scipy, Scikit-Learn, etc… for various clients in the United States, Canada, the United Kingdom, Australia, New Zealand, etc. Check out my profile.