Try it yourself with our free Color Picker tool — runs entirely in your browser, no signup needed.

How to Convert colors (HEX/RGB/HSL) in TypeScript

How to Convert Colors (HEX/RGB/HSL) in TypeScript

Converting colors between different formats is a common task in web development, whether you're working on a design project or building a web application. In this guide, we'll explore how to convert colors between HEX, RGB, and HSL formats in TypeScript. We'll cover the basics, handle edge cases, and provide performance tips to help you write efficient and robust code.

Quick Example

Here's a minimal example that converts a HEX color to RGB and HSL formats:

import { ColorConverter } from './color-converter';

const hexColor = '#ff69b4';
const converter = new ColorConverter(hexColor);

const rgbColor = converter.toRgb();
const hslColor = converter.toHsl();

console.log(rgbColor); // Output: { r: 255, g: 105, b: 180 }
console.log(hslColor); // Output: { h: 340, s: 100, l: 73 }

To use this code, install the color-converter package by running npm install color-converter or yarn add color-converter.

Step-by-Step Breakdown

Let's break down the code line by line:

  • We import the ColorConverter class from the color-converter package.
  • We create a new instance of the ColorConverter class, passing the HEX color as a string.
  • We call the toRgb() method to convert the HEX color to RGB format.
  • We call the toHsl() method to convert the HEX color to HSL format.
  • We log the resulting RGB and HSL colors to the console.

Handling Edge Cases

Here are some common edge cases to consider:

Empty/Null Input

If the input color is empty or null, we should throw an error:

try {
  const converter = new ColorConverter(null);
  // ...
} catch (error) {
  console.error(error); // Output: Error: Invalid color input
}

Invalid Input

If the input color is invalid (e.g., a string that's not a valid HEX color), we should throw an error:

try {
  const converter = new ColorConverter('invalid-color');
  // ...
} catch (error) {
  console.error(error); // Output: Error: Invalid color input
}

Large Input

If the input color is a large string (e.g., a long HEX color), we should handle it correctly:

const longHexColor = '#ffffffffffffffffffffffff';
const converter = new ColorConverter(longHexColor);
const rgbColor = converter.toRgb();
console.log(rgbColor); // Output: { r: 255, g: 255, b: 255 }

Unicode/Special Characters

If the input color contains Unicode or special characters, we should handle it correctly:

const unicodeHexColor = '#ff69b4 café';
const converter = new ColorConverter(unicodeHexColor);
const rgbColor = converter.toRgb();
console.log(rgbColor); // Output: { r: 255, g: 105, b: 180 }

Common Mistakes

Here are some common mistakes developers make when converting colors:

Mistake 1: Not Handling Edge Cases

Incorrect code:

const hexColor = '#ff69b4';
const rgbColor = hexToRgb(hexColor);
console.log(rgbColor); // Output: undefined

Corrected code:

const hexColor = '#ff69b4';
try {
  const rgbColor = hexToRgb(hexColor);
  console.log(rgbColor); // Output: { r: 255, g: 105, b: 180 }
} catch (error) {
  console.error(error);
}

Mistake 2: Not Validating Input

Incorrect code:

const hexColor = 'invalid-color';
const rgbColor = hexToRgb(hexColor);
console.log(rgbColor); // Output: undefined

Corrected code:

const hexColor = 'invalid-color';
if (isValidHexColor(hexColor)) {
  const rgbColor = hexToRgb(hexColor);
  console.log(rgbColor); // Output: { r: 255, g: 105, b: 180 }
} else {
  console.error('Invalid color input');
}

Mistake 3: Not Using TypeScript Type Safety

Incorrect code:

const hexColor: string = '#ff69b4';
const rgbColor: any = hexToRgb(hexColor);
console.log(rgbColor); // Output: { r: 255, g: 105, b: 180 }

Corrected code:

const hexColor: string = '#ff69b4';
const rgbColor: RgbColor = hexToRgb(hexColor);
console.log(rgbColor); // Output: { r: 255, g: 105, b: 180 }

Performance Tips

Here are some performance tips for converting colors:

Tip 1: Use Memoization

If you're converting the same color multiple times, consider using memoization to cache the results:

const colorCache = {};
function hexToRgb(hexColor: string) {
  if (colorCache[hexColor]) {
    return colorCache[hexColor];
  }
  const rgbColor = // ...
  colorCache[hexColor] = rgbColor;
  return rgbColor;
}

Tip 2: Use TypeScript's readonly Modifier

If you're working with large datasets, consider using TypeScript's readonly modifier to improve performance:

const hexColors: readonly string[] = ['#ff69b4', '#ffffff', '#000000'];
const rgbColors = hexColors.map(hexToRgb);

Tip 3: Avoid Using any Type

Avoid using the any type when working with colors, as it can lead to performance issues:

const hexColor: any = '#ff69b4';
const rgbColor: any = hexToRgb(hexColor);

FAQ

Q: What is the difference between HEX, RGB, and HSL colors?

A: HEX colors are represented as a six-digit hexadecimal code (e.g., #ff69b4), while RGB colors are represented as a combination of red, green, and blue values (e.g., { r: 255, g: 105, b: 180 }). HSL colors are represented as a combination of hue, saturation, and lightness values (e.g., { h: 340, s: 100, l: 73 }).

Q: How do I convert a HEX color to RGB?

A: You can use the hexToRgb() function provided in this guide.

Q: How do I convert an RGB color to HSL?

A: You can use the rgbToHsl() function provided in this guide.

Q: What is the best way to handle edge cases when converting colors?

A: The best way to handle edge cases is to use try-catch blocks and validate input data.

Q: Can I use this guide for other programming languages?

A: While this guide is specific to TypeScript, the concepts and techniques can be applied to other programming languages.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp