Size: a a a

2020 March 04

SG

Stas G in Frontend UA
🤔
источник

SG

Stas G in Frontend UA
сливаюсь
источник

EO

Eugene Obrezkov in Frontend UA
export interface ShapeOptions {
 text: string
 x: 'left' | 'center' | 'right' | string
 y: 'top' | 'middle' | 'bottom' | string
 width: string
 height: string
 background: 'none' | string
 foreground: 'none' | string
}
источник

SG

Stas G in Frontend UA
подождем знатоков)
источник

EO

Eugene Obrezkov in Frontend UA
хорошо)

ну в общем мне надо более гибкий сериализатор\десериализатор на типах
источник

EO

Eugene Obrezkov in Frontend UA
чтобы я в наследниках Shape мог переопределять их сериализатор и кастить к другому типу, но при этом чтобы быть уверенным, что он не выходит за рамки основного, что-то вроде вот такого

toObject(): CodeObject {
   const obj: CodeObject = super.toObject();
   obj.options = { ...obj.options, code: this._code };

   return obj;
 }
источник

EO

Eugene Obrezkov in Frontend UA
переопределил сериализатор, сказал что у меня вот тут теперь будет CodeObject, который наследник ShapeObject, но сигнатура уже не совпадает с тем что в базовом классе

поэтому взялся за генерики в базовом классе

похожая проблема возникла вот в этом месте

static create<T extends Shape, O extends ShapeOptions>(cursor: Canvas, options?: Partial<O>): T {
   return new this(cursor, options);
 }
источник

A

Art in Frontend UA
Спасибо, мне как раз скроллить нужно а не наоборот)
источник

A

Art in Frontend UA
Спасибо, по сути на очендж в реакте это делать, предложу такой вариант
источник

DB

Dima Bildin in Frontend UA
Eugene Obrezkov
как-то может сказать ему что это точно ShapeObject, атвечаю
Не очень этого понял. Имеется в виду
toObject<T extends ShapeObject>(): this {


?
источник

EO

Eugene Obrezkov in Frontend UA
Dima Bildin
Не очень этого понял. Имеется в виду
toObject<T extends ShapeObject>(): this {


?
Тогда T не будет использован?

Там есть пример получше у меня с create.

Базовый create это обертка поверх new this() - сахар в общем

Я уже с телефона, в пути, могу пока только ссылку кинуть что хочу и почему не получается
источник

EO

Eugene Obrezkov in Frontend UA
Dima Bildin
Не очень этого понял. Имеется в виду
toObject<T extends ShapeObject>(): this {


?
источник

EO

Eugene Obrezkov in Frontend UA
Это сахар для дочерних классов, чтобы не через new, а через create
источник

EO

Eugene Obrezkov in Frontend UA
В дочерних классах я этот create не переопределяю, и получается что типы не соответствуют и в параметрах и в return
источник

EO

Eugene Obrezkov in Frontend UA
Вот и хочу в базовом классе это всё описать генериками на случай, если дочерний класс не переопределяет какой-то из методов
источник

DB

Dima Bildin in Frontend UA
М.. Может, generic вынести на уровень класса?
Типа
class Shape<T extends ShapeOptions> implements ShapeOptions {
  constructor(cursor: Canvas, options?: Partial<T>) {}

 static create(cursor: Canvas, options?: Partial<T>): this {}
}


?
источник

EO

Eugene Obrezkov in Frontend UA
Хм, не думал о таком варианте
источник

EO

Eugene Obrezkov in Frontend UA
А этот T можно перекрыть в тип аргументах методов класса?
источник

EO

Eugene Obrezkov in Frontend UA
Я за shadowing
источник

DB

Dima Bildin in Frontend UA
Как понять перекрыть?
источник