Natural sorting/comparing algorithm in TypeScript
Dead code

interface NaturalSortConfig {
    keyFunc?: NaturalKeyFunc;
    //desc?: boolean;
    //caseInsensitive?: boolean;
}


Dead code does nothing, except take up screen space, and confuse people who don't know why it was written and removed in the first place.

Braces

This is a bit of a holy-war.  However, at least one bug (the Apple SSL bug) was caused by missing braces.  Personally, I use them:

if (typeof a === "number" &amp;&amp; typeof b === "number") {
    return a - b;
}


Instead of:

if (typeof a === "number" &amp;&amp; typeof b === "number")
    return a - b;


Functions

You may want to consider splitting this into more methods.  One possible method might be to move the code to determine whether to early-return into its own function:

function IsValidData (o) {
    return o === null || o === undefined || Array.isArray(o);
}


Most of the code in naturalSort() is duplicated - more functions would really help here.

Early exit

As mentioned in the comments in the previous (deleted) answer, you can early-return as soon as you know which value is sorted higher.  For example, sorting "aa" against "bb" should be able to return after checking the first character of each, while "aaa" vs. "aba" should be able return after checking the second, and so on.