Модуль Typescript: интерфейс экспорта и все его свойства

У меня есть модуль с несколькими экспортированными функциями. Объявление моего модуля выглядит так:

declare module 'my-module' {
  export function getUserAvailablePaymentMethods(requestData: {
    merchantId: number,
  }): Promise<any>

  // etc...
}

Это прекрасно работает. Хотя я бы также хотел экспортировать интерфейс из этого модуля с теми же функциями. Нравится:

declare module 'my-module' {
  export interface InjectedActions {
    getUserAvailablePaymentMethods: (requestData: {
      merchantId: number,
    }) => Promise<any>
  }

  export function getUserAvailablePaymentMethods(requestData: {
    merchantId: number,
  }): Promise<any>

  // etc...
}

Причина этого в том, что я иногда хочу ввести свои реагирующие компоненты, и тогда мне нужен интерфейс.

Эта проблема

Я не хочу писать все функции дважды, как в моем примере. Я пробовал это делать:

declare module 'my-module' {
  export function getUserAvailablePaymentMethods(requestData: {
    merchantId: number,
  }): Promise<any>

  export interface InjectedDevcodeActions {
    getUserAvailablePaymentMethods: getUserAvailablePaymentMethods
  }
  // etc...
}

Но это не работает. Я получаю: «Не могу найти имя getUserAvailablePaymentMethods».

Можно ли этого добиться, не записывая функции дважды?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
1 081
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Значение getUserAvailablePaymentMethods нельзя использовать напрямую как тип. Используйте typeof, если вам нужен его тип:

declare module 'my-module' {
  export function getUserAvailablePaymentMethods(requestData: {
    merchantId: number,
  }): Promise<any>

  export interface InjectedDevcodeActions {
    getUserAvailablePaymentMethods: typeof getUserAvailablePaymentMethods
  }
  // etc...
}

Эта проблема - лучшее сообщение об ошибке.

Другие вопросы по теме