Union Types in TypeScript

Union Types in TypeScript

A Content of Complete Angular Roadmap Series [Topic 4- Union Types in TypeScript - #4]

Introduction

TypeScript is a programming language that enables developers to write safer and more efficient code by enforcing static types. One of the most significant features of TypeScript is its ability to define Union Types, a type that can hold multiple types. Union Types in TypeScript allow you to specify that a variable can hold either one or more types of data, making it a powerful tool for developers. In this article, we will explore the ins and outs of Union Types in TypeScript and how they can benefit your coding projects.

What are Union Types in TypeScript?

A Union Type is a type that can hold more than one type of data. In TypeScript, the vertical bar "|" separates the different types that a variable can hold. For example, a variable with a Union Type of string | number can hold either a string or a number.

Union Types are useful when you need to work with variables that can have multiple types of data. They allow you to avoid having to use any or object types, which can lead to errors and unexpected results. With Union Types, you can be more precise about the types of data that your variables can hold.

Syntax

The syntax for defining a Union Type in TypeScript is straightforward. You simply use the vertical bar "|" to separate the different types that a variable can hold. Here's an example:

let myVariable: string | number;

In this example, myVariable can hold either a string or a number. You can also use Union Types with more than two types of data. For instance:

let myOtherVariable: string | number | boolean;

In this case, myOtherVariable can hold a string, number, or boolean data type.

Advantages of Using Union Types

Union Types in TypeScript offer several advantages that can benefit your coding projects, including:

  1. Improved code readability: Union Types allow you to be more precise about the types of data that your variables can hold, making your code more readable and easier to understand.

  2. Increased flexibility: With Union Types, you can work with variables that can hold multiple types of data, making your code more flexible and adaptable.

  3. Reduced errors: By using Union Types, you can avoid using any or object types, which can lead to errors and unexpected results. Union Types allow you to be more precise about the types of data that your variables can hold, reducing the risk of errors.

How to Use Union Types in TypeScript

To use Union Types in TypeScript, you simply define a variable with the "|" symbol separating the different types of data that the variable can hold. Here's an example:

let myVariable: string | number;
myVariable = "Hello World";
console.log(myVariable);
myVariable = 123;
console.log(myVariable);

In this example, we define a variable called myVariable, which can hold either a string or a number. We then assign a string value to myVariable and output it to the console. Next, we assign a number value to myVariable and output it to the console again.

You can also use Union Types with function parameters and return types. Here's an example:

function add(a: number | string, b: number | string): number | string {
  if (typeof a === "number" && typeof b === "number") {
    return a + b;
  } else {
    return a.toString() + b.toString();
  }
}

console.log(add(2, 3));
console.log(add("Hello ", "World"));

In this example, we define a function called add that takes two parameters, a and b, both of which can hold either a number or a string. The function then checks the types of a and b, and if they are both numbers, it returns the sum of a and b. Otherwise, it concatenates a and b as strings and returns the result.

We can then call the add function with different types of parameters, including numbers and strings, and get the expected result.

FAQs

  1. Can Union Types be used with custom data types?

Yes, you can use Union Types with custom data types that you define in your TypeScript code. For example:

interface Person {
  name: string;
  age: number;
}

let myVariable: string | number | Person;

In this example, we define a custom data type called Person, which has a name and age property. We then define a variable called myVariable that can hold either a string, number, or Person data type.

  1. What happens if a variable with a Union Type is assigned a value of a different type?

If you assign a value to a variable with a Union Type that is not one of the specified types, TypeScript will throw a compilation error. For example:

let myVariable: string | number;
myVariable = true; // Compilation error: Type 'boolean' is not assignable to type 'string | number'.

In this example, we define a variable called myVariable that can hold either a string or number. However, when we try to assign a boolean value to myVariable, TypeScript throws a compilation error because boolean is not one of the specified types.

  1. Can you use Union Types with optional parameters in functions?

Yes, you can use Union Types with optional parameters in functions. For example:

function sayHello(name?: string | null): void {
  if (name) {
    console.log(`Hello, ${name}!`);
  } else {
    console.log("Hello, world!");
  }
}

sayHello(); // Output: Hello, world!
sayHello("John"); // Output: Hello, John!
sayHello(null); // Output: Hello, world!

In this example, we define a function called sayHello that takes an optional parameter called name, which can hold either a string or null data type. If name is provided and not null, the function outputs a personalized greeting. Otherwise, it outputs a generic greeting.

Conclusion

Union Types in TypeScript are a powerful feature that can improve the readability, flexibility, and safety of your code. By using Union Types, you can be more precise about the types of data that your variables can hold, reducing the risk of errors and unexpected results. Union Types can also be used with custom data types and optional parameters in functions, making them a versatile tool for developers. So next time you're working on a TypeScript project, consider using Union Types to make your code safer and more efficient.