用默认值推断正确的参数类型

时间:2019-08-09 05:47:24

标签: typescript inference

我有一个带有“查询处理程序”的对象,每个查询处理程序都可以使用解构来接收一个带有“参数”的对象,我需要使用默认值指定参数类型。

class BaseArg<T> {
  value: T;
}
class NumberArg extends BaseArg<number> {}
class BooleanArg extends BaseArg<boolean> {}

type QueryArgs = { [key: string]: BaseArg<any> };
type Query = (args?: QueryArgs) => any;
type Queries = { [query: string]: Query };

class User {
  id: number;
  isAvailable: boolean;
}

const users: User[] = [];

const queries: Queries = {
  getUser: ({
    id = new NumberArg(), // <- this is "BaseArg<any>" but I expect "NumberArg"
  }) => {
    return users.find(user => user.id === id.value);
  },
  getUsers: ({
    onlyAvailables = new BooleanArg(), // <- this is BaseArg<any> but I expect BooleanArg
  }) => {
    if(onlyAvailables) {
      return users.filter(user => user.isAvailable);
    }
    return users;
  },
};

QueryArgs中,我使用BaseArg<any>作为值,但其默认值为NumberArgBooleanArg,如何在不指定查询参数类型的情况下做到这一点

  getUser: ({
    id = new NumberArg(),
  }: {
    id: NumberArg,
  }) => {
    return users.find(user => user.id === id.value);
  },

0 个答案:

没有答案