如何在TypeScript

时间:2018-10-22 16:42:23

标签: typescript typescript-typings typescript3.0

如何在TypeScript的以下代码段中创建接口IFoo来键入调用controller的结果?

我将函数定义如下:

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 =(...)

tutorial from Apollo Graphql的启发:

1 个答案:

答案 0 :(得分:0)

userscontroller的正确类型不相同,因为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 => ({ ... });

如果这不是您要的,请说明问题。