Модуль 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».

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

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...
}

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

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