我有一个通用的包装函数,它接受一个类,然后需要推断返回类型的实例类型 - 但我无法让它工作...对于一些额外的上下文,这是用于数据库使用Objection查询。
类:
请注意,Model
类来自Objection库。
class Model {
static query<T>(this: Constructor<T>): QueryBuilder<T>;
}
class Person extends Model {
name: string;
}
打包机:
function findById<T extends Model>(
model: { query(): QueryBuilder<T> }
) {
return (id: string) => model.query().findById(id);
}
人员实施:
import Person from 'models/person';
const findById = Wrapper.findById(Person);
我希望实现的返回类型可以推断为Promise<Person | undefined>
,但是它推断为Promise<any>
。
即使在包装函数中添加一些额外的输入(尝试避免可能存在的任何异议级别输入问题):
function findById<T extends Base>(
model: { query(): QueryBuilder<T> }
) {
return (id: string): Promise<T | undefined> => model.query().findById(id);
}
该实现仍然指出返回类型为Promise<any>
。
我做错了吗?有没有办法实现我在这里的目标?