Обобщение Typescript выводит тип экземпляра из типа класса
У меня есть универсальная функция-обертка, которая принимает класс, а затем необходимо определить тип экземпляра для возвращаемого типа - но у меня возникают проблемы с тем, чтобы заставить это работать... Для некоторого дополнительного контекста это для запросов к базе данных с использованием Objection,
Классы:
Обратите внимание, что Model
класс поступает из библиотеки возражений.
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>
,
Я делаю что-то неправильно? Есть ли способ добиться того, что я здесь?