@Evtera

Почему тайпскрипт неправильно считывает тип?

Здравствуйте. Подскажите, пожалуйста, не совсем понимаю, почему тайпскрипт не понимает, что если я в params передаю тип, то этот же тип и должен вернуться в get.
Вместо этого, он считает, что постоянно возвращается TGetSkills

То есть, изначально имеем два типа
export type TGetSkills = TApiRequest<
  {
    isActive?: boolean
    'user-id'?: number
    skillIds?: number[]
  },
  {
    request_count: number
    update_user_id: number
  }[]
>

export type TGetSkillsWithCriterions = TApiRequest<
  TGetSkills['requestParams'] & { getCriterions: true },
  (TGetSkills['response'][number] & { skill_criterions: TSkillCriterion })[]
>


Потом используем их в аксиосе
getSkills: (
    params: (TGetSkills | TGetSkillsWithCriterions)['requestParams'],
  ) =>
    instance.get<(TGetSkills | TGetSkillsWithCriterions)['response']>('url', {
      params: params,
    }),
}


после чего вызываем функцию

const { data } = await schedulerService.getSkills({
        getCriterions: true,
      })


и по логике тип data должен быть TGetSkillsWithCriterions, но это не так.
Он будет равен TGetSkills

Почему так?
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
Aetae
@Aetae Куратор тега TypeScript
Тлен
Скорее всего поможет перегрузка, что-то типа:
function getSkills(params: TGetSkills['requestParams']): TGetSkills['response'];
function getSkills(params: TGetSkillsWithCriterions['requestParams']): TGetSkillsWithCriterions['response'];
function getSkills(
    params: (TGetSkills | TGetSkillsWithCriterions)['requestParams'],
  ) {
    return instance.get<(TGetSkills | TGetSkillsWithCriterions)['response']>('url', {
      params: params,
    }),
}

getSkills: getSkills
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы