我有一个带有“查询处理程序”的对象,每个查询处理程序都可以使用解构来接收一个带有“参数”的对象,我需要使用默认值指定参数类型。
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>
作为值,但其默认值为NumberArg
和BooleanArg
,如何在不指定查询参数类型的情况下做到这一点
getUser: ({
id = new NumberArg(),
}: {
id: NumberArg,
}) => {
return users.find(user => user.id === id.value);
},