Перегрузка Typescript необязательными параметрами не работает? - PullRequest
0 голосов
/ 13 декабря 2018

Давайте предположим упрощенный пример (я знаю, что в данном конкретном упрощении перегрузка не нужна, но она упрощена)

РЕДАКТИРОВАТЬ: первый приведенный пример был недостаточен для понимания проблемы, вот обновленный:

function fn <T>( // Overload signature is not compatible with function implementation.ts(2394)
  fn: (item: T) => T,
): (idx: number) => (src: T[]) => T[]
function fn <T>(
  fn: (item: T) => T,
  idx: number,
): (src: T[]) => T[]
function fn(fn: (x: any) => any, idx?: number) {

}

Как в этом случае вы бы квалифицировали тип Return в реализации.

У меня есть жалоба компилятора на первое определение с ts(2394), и я не получаючто я делаю не так.

Заранее спасибо Seb

1 Ответ

0 голосов
/ 13 декабря 2018

Чтобы исправить вашу проблему, вам нужно добавить тип возврата к реальной логике функции, а не только к определениям.

Из-за того факта, что перегрузка каждого определения может возвращать различный результат, фактическая логиканужен какой-то способ поддержать это.Ленивый способ сделать это - просто вернуть any, однако лучший способ - вернуть все определения, разделенные каналом |.Если возвращаемые типы слишком длинные, просто создайте определение declare type и объявите каждое отдельно.

declare type A<T> = (idx: number) => (src: T[]) => T[]
declare type B<T> =  (src: T[]) => T[]

function fn<T>(fn: (item: T) => T): A<T>
function fn<T>(fn: (item: T) => T, idx: number): B<T>
function fn<T>(fn: (x: any) => any, idx?: number): A<T> | B<T> {

}
...