Как получить тип первой перегрузки в typescript?

В TypeScript, чтобы получить тип первой перегрузки, необходимо использовать оператор typeof в сочетании с конструкцией перегрузки.

Перегрузка функции в TypeScript позволяет определить различные варианты сигнатуры функции для разных типов аргументов или разных типов возвращаемого значения. Компилятор TypeScript будет выбирать соответствующую перегрузку на основе переданных аргументов или типа возвращаемого значения.

Для того чтобы получить тип первой перегрузки, необходимо использовать typeof вместо вызова самой функции. Рассмотрим следующий пример:

function foo(x: string): number;
function foo(x: number): string;
function foo(x: any): any {
  if (typeof x === "string") {
    return x.length;
  } else if (typeof x === "number") {
    return x.toString();
  }
}

type FirstOverload = typeof foo extends (x: infer U) => any ? U : never;

В этом примере мы объявляем функцию foo с двумя перегрузками: первая принимает строку и возвращает число, а вторая принимает число и возвращает строку. Затем мы используем typeof и infer в сочетании с условным типом, чтобы получить тип первой перегрузки функции foo.

В результате полученного выражения typeof foo, вывреженем тип первой перегрузки функции foo.

В общем, использование typeof в сочетании с перегрузками позволяет получить тип первой перегрузки функции в TypeScript.