Модуль Typescript: экспорт интерфейса и всех его реквизитов - PullRequest
0 голосов
/ 31 октября 2018

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

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 голосов
/ 31 октября 2018

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

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

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

Эта проблема предназначена для лучшего сообщения об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...