Г(
https://mariusschulz.com/blog/mixin-classes-in-typescript#:~:text=Mixins%20in%20JavaScript%2FTypeScript,is%20based%20on%20composing%20behavior.
Size: a a a
Г(
SK
get
, post
, put
, delete
. В базовом классе CrudRequester
у меня все эти методы реализованы, мне остается сделать так:export const userController = new CrudRequester('/api/users')В
userController
у меня уже будут все методыclass UserController extends CrudRequester {Если делать с разбитием на 4 интерфейса код будет таким
someOtherMethod() {...}
}
export const userController = new UserController('/api/users')
interface IUserController extends GetRequest, PutRequest, PostRequest, DeleteRequestИ так для каждого контроллера (эндпоинта) на беке, а у меня их очень много. Получается много повторений или я туплю?
class UserController implements IUserController {
constructor(private url: string) {};
get() {...}
post() {... }
put() {... }
delete() {...}
}
Г(
VB
Г(
TBase extends Constructor & RequestSettings
Не нравится, что нужно статическое свойство url
, а иначе никак из базового класса свойство не получается достатьVB
TBase extends Constructor & RequestSettings
Не нравится, что нужно статическое свойство url
, а иначе никак из базового класса свойство не получается достатьtype RequestSettings = {
url: string
}
type Constructor<T extends RequestSettings> = new (...args: any[]) => T;
function WithGet<TBase extends Constructor<RequestSettings>>(Base: TBase) {
return class extends Base {
get() { return this.url }
};
}
Г(
type RequestSettings = {
url: string
}
type Constructor<T extends RequestSettings> = new (...args: any[]) => T;
function WithGet<TBase extends Constructor<RequestSettings>>(Base: TBase) {
return class extends Base {
get() { return this.url }
};
}
VB
Г(
АК
VS
IK
VS
c
c
VS
IK
IK
O
IK