```ts
export function runLengthEncode(input: string): string {
  if (typeof input !== "string") {
    throw new Error("Input must be a string");
  }

  return input
    .split('')
    .reduce((acc, char, i, arr) => {
      const runLength = arr.slice(i).findIndex(c => c !== char);
      acc.push(char + (runLength === -1 ? '1' : runLength.toString()));
      return acc;
    }, [] as string[])
    .join('');
}
```