Есть примерно такой код:
// реализация
function providerGetItem(id: number): Item
function providerGetItem(id: number[]): Item[]
function providerGetItem(id: number | number[]): Item | Item[] {
return typeof id === 'number' ? {id} : id.map(id => ({id}))
}
// Абстракция
function getItem(id: number): Item
function getItem(id: number[]): Item[]
function getItem(id: number | number[]): Item | Item[] {
return providerGetItem(id) // <-- TS2769: No overload matches this call
}
Playground.
Вызов
providerGetItem(id)
приводит к ошибке:
TS2769: No overload matches this call.
Overload 1 of 2, '(myAnimeListId: number): Promise<Series | undefined>', gave the following error.
Argument of type 'number | number[]' is not assignable to parameter of type 'number'.
Type 'number[]' is not assignable to type 'number'.
Overload 2 of 2, '(myAnimeListId: number[]): Promise<Series[]>', gave the following error.
Argument of type 'number | number[]' is not assignable to parameter of type 'number[]'.
Type 'number' is not assignable to type 'number[]'.
Как её исправить? Единственное что пришло в голову:
typeof id === 'number' ? providerGetItem(id) : providerGetItem(id)