Добрый день, есть функция высшего порядка, которая добавляет методы и свойства в классы.
typescript
class Model {
prototype: any;
static find(id: number): number {
return id;
}
save(): boolean {
return true;
}
}
function foo<M extends Model>(model: M) { // Какой тип она должна вернуть ?
model.prototype.create = function (): void {
// do something
};
model.findAll = function (): number[] { // Error Property 'findAll' does not exist on type 'M'.
return [1, 2, 3];
}
return model;
}
Столкнулся с 2 проблемами, которые никак не могу нагуглить и понять.
1. Какой тип должна возвращать эта функция ?
Пробовал создать класс с добавленными методами, свойствами и возвращать его тип:
class NewModel {
create(): void;
static findAll(): number[];
}
function foo<M extends Model>(model: M): NewModel { ... }
Но компилятор ожидает от foo() объект класса NewModel, а не сам расширенный класс (думаю тут что-нибудь с typeof NewModel нужно, но разобраться не получилось покачто, только запутался)
2. Как расширять классы, если в них нет добавляемых методов/свойств?:
Error Property 'findAll' does not exist on type 'M'.