Как набрать результат функции в TypeScript - PullRequest
0 голосов
/ 22 октября 2018

Как я могу создать интерфейс IFoo, чтобы ввести результат вызова controller в следующем фрагменте в TypeScript?

Я определяю функции следующим образом:

export const controller = ({ loggedUser }: IConArgs) => ({
  async getAll() {
     ...
  },

  async getById(id: IUserId) {
     ...
  },
  ...
});

Я назначаю его вследующим образом:

controllers: {
    users: controller({ loggedUser: user })
}

тогда я называю это соответственно: controllers.users.getAll();

Я хочу сделать следующее:

IControllers: {
    controllers: {
       users: IFoo
    }
}

и

контроллер экспорта const: IFoo = (...)

Вдохновлен учебником от Apollo Graphql :

1 Ответ

0 голосов
/ 23 октября 2018

Правильный тип для users и controller не совпадает, потому что users является результатом вызова controller.Вы можете позволить IFoo быть интерфейсом для users:

interface IFoo {
    // TODO: Change `any` to correct return type
    getAll(): Promise<any>;
    getById(id: IUserId): Promise<any>;
}

Если вы хотите аннотировать тип controller, вы можете сделать:

export const controller: (args: IConArgs) => IFoo =
    ({ loggedUser }: IConArgs) => ({ ... });

Лучше,Вместо этого аннотируйте возвращаемый тип функции стрелки, чтобы избежать повторения типа параметра:

export const controller = ({ loggedUser }: IConArgs): IFoo => ({ ... });

Если это не то, о чем вы просили, уточните вопрос.

...