首页 > 解决方案 > 使用默认值推断正确的参数类型

问题描述

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

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>as 值,但它的默认值为NumberArgand BooleanArg,如何在不指定查询 args 类型的情况下做到这一点

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

标签: typescriptinference

解决方案


推荐阅读