How to Compare Strings in TypeScript

When working with TypeScript applications, I find myself comparing strings almost daily. A few examples of when I was comparing strings include sorting arrays, validating user input, or checking conditions in my code. What seems like a simple operation actually has several nuances that can trip up even experienced developers.

In this article, I’ll walk you through the various methods to compare strings in TypeScript, from basic equality checks to more advanced techniques for sorting and case-sensitive comparisons. I’ve learned these approaches through years of development experience, and I’m excited to share them with you to make you understand it easily.

Basic String Comparison Methods in TypeScript

I will show you here some basic string comparison methods in TypeScript with examples.

Using Equality Operators (== vs ===)

The best way to compare strings in TypeScript is by using the equality operators. You can use either the == or === operators for basic string comparison.

Here is an example.

// Using loose equality (==)
const string1 = "hello";
const string2 = "hello";
console.log(string1 == string2); // true

// Using strict equality (===)
console.log(string1 === string2); // true

While both operators work for comparing strings, I strongly recommend using the strict equality operator (===) as it compares both value and type without type coercion. This helps avoid unexpected behavior in your code.

You can see the exact output in the screenshot below; I executed the above TypeScript code using VS Code.

Compare Strings in TypeScript

Case-Sensitive Comparison

By default, string comparisons in TypeScript are case-sensitive:

const upperCase = "HELLO";
const lowerCase = "hello";

console.log(upperCase === lowerCase); // false

If you need to compare strings regardless of their case, you should convert both strings to the same case first:

console.log(upperCase.toLowerCase() === lowerCase.toLowerCase()); // true

Using localeCompare() Method

When you need more sophisticated string comparison that respects language-specific rules, the localeCompare() method is your friend:

const a = "apple";
const b = "banana";

console.log(a.localeCompare(b)); // Returns negative value because 'a' comes before 'b'
console.log(b.localeCompare(a)); // Returns positive value because 'b' comes after 'a'

The localeCompare() method returns:

  • A negative value if the reference string comes before the compared string
  • A positive value if the reference string comes after the compared string
  • Zero if they are equivalent

Check out Typescript split string multiple separators

Compare Strings for Sorting in TypeScript

Now, let me show you some methods to compare strings for sorting in TypeScript. All method will have examples.

Using Array.sort() with String Comparison

When sorting an array of strings, TypeScript’s Array.sort() method uses string comparison internally:

const fruits = ["banana", "apple", "cherry", "date"];
fruits.sort();
console.log(fruits); // ["apple", "banana", "cherry", "date"]

You can see the exact output in the screenshot below:

typescript compare strings for sorting

For custom sorting logic, you can provide a comparison function:

const fruits = ["banana", "apple", "cherry", "date"];
// Sort by string length
fruits.sort((a, b) => a.length - b.length);
console.log(fruits); // Will sort from shortest to longest

Case-Insensitive Sorting

To perform case-insensitive sorting:

const mixedCaseFruits = ["Apple", "banana", "Cherry", "date"];
mixedCaseFruits.sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));
console.log(mixedCaseFruits); // Will sort alphabetically ignoring case

Check out Convert String to Enum in TypeScript

Check Substrings and String Content

This is another scenarios where you will need to compare strings in TypeScript. When you required to check substrings and string content.

I will show here two useful methods.

Using includes() Method

To check if a string contains a substring in TypeScript, use the includes() method:

const text = "TypeScript is awesome";
console.log(text.includes("awesome")); // true
console.log(text.includes("Java")); // false

This method is case-sensitive. For case-insensitive checks:

console.log(text.toLowerCase().includes("AWESOME".toLowerCase())); // true

Using startsWith() and endsWith()

To check if a string starts or ends with specific characters:

const filename = "document.txt";
console.log(filename.startsWith("doc")); // true
console.log(filename.endsWith(".txt")); // true

Checking for Empty Strings

To check if a string is empty in TypeScript, you have several options:

const emptyString = "";

// Using length property
console.log(emptyString.length === 0); // true

// Using strict equality
console.log(emptyString === ""); // true

Advanced String Comparison Techniques

Now, i will show you some advanced string comparison techniques in TypeScript but very much useful.

Comparing String Dates

When comparing dates that are stored as strings, you should convert them to Date objects first. Here is an example.

const date1 = "2025-04-20";
const date2 = "2025-05-15";

// Convert to Date objects and compare
const d1 = new Date(date1);
const d2 = new Date(date2);

console.log(d1 < d2); // true
console.log(d1.getTime() === d2.getTime()); // false

You can see the exact output in the screenshot below:

typescript compare strings

Using Regular Expressions for Complex Comparisons

For more complex string pattern matching, regular expressions are invaluable:

const email = "user@example.com";
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;

console.log(emailPattern.test(email)); // true

Unicode-Aware Comparisons

When working with international text, be mindful of Unicode considerations. Here is a perfect example.

// Using localeCompare with options for proper Unicode sorting
const strings = ["café", "cafe", "apple"];
strings.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));
console.log(strings); // ["apple", "cafe", "café"] or similar based on locale

Type-Safe String Comparisons in TypeScript

Let me show you how to do type safe string comparisons in TypeScript.

Using Type Guards

TypeScript’s type system can help ensure type-safe comparisons; here is an example and the complete code.

function isString(value: any): value is string {
    return typeof value === 'string';
}

function compareIfStrings(a: any, b: any): boolean {
    if (isString(a) && isString(b)) {
        return a === b;
    }
    throw new Error("Both values must be strings");
}

String to Boolean Conversions

Sometimes you need to convert strings to boolean values for comparison; here is an example and the complete TypeScript code.

// Direct comparison method
function stringToBoolean(value: string): boolean {
    return value.toLowerCase() === 'true';
}

console.log(stringToBoolean("true")); // true
console.log(stringToBoolean("True")); // true
console.log(stringToBoolean("false")); // false

String Manipulation for Comparison

Now, let me show you another scenario where you might need to do string manipulations before comparing strings.

String Replacement

Sometimes you need to replace characters before comparison:

const dirtyText = "Compare-these-strings";
const cleanText = dirtyText.replaceAll("-", " ");
console.log(cleanText); // "Compare these strings"

// For older versions without replaceAll
const alternativeClean = dirtyText.replace(/-/g, " ");

Normalizing Strings

For international text, normalization ensures consistent comparisons:

const composed = "\u00F1"; // ñ as a single character
const decomposed = "\u006E\u0303"; // n plus combining tilde

console.log(composed === decomposed); // false

// Normalize both strings to ensure consistent comparison
console.log(composed.normalize() === decomposed.normalize()); // true

Performance Considerations

When comparing strings in performance-critical applications, keep these tips in mind:

  1. Simple equality checks (===) are fastest for exact matches
  2. Use .startsWith() and .endsWith() instead of complex regex when possible
  3. Pre-process strings (toLowerCase, etc.) outside of loops
  4. For frequent comparisons against the same string, consider caching results
// Less efficient in a loop
for (let i = 0; i < 1000; i++) {
    if (someString.toLowerCase() === "target") {
        // Do something
    }
}

// More efficient
const normalizedString = someString.toLowerCase();
for (let i = 0; i < 1000; i++) {
    if (normalizedString === "target") {
        // Do something
    }
}

Conclusion

In this tutorial, I explained how to do string comparison in TypeScript using different methods. We saw different scenarios and different examples such as basic equality checks, locale-aware comparisons and performance optimizations, etc.

I hope this guide has been helpful! If you have questions or want to share your own techniques for string comparison in TypeScript, please leave a comment below.

You may also like:

Power Apps functions free pdf

30 Power Apps Functions

This free guide walks you through the 30 most-used Power Apps functions with real business examples, exact syntax, and results you can see.

Download User registration canvas app

DOWNLOAD USER REGISTRATION POWER APPS CANVAS APP

Download a fully functional Power Apps Canvas App (with Power Automate): User Registration App