Я Java-разработчик, который борется с Typescript.У меня есть абстрактный класс Shape и два конкретных класса, которые его наследуют: Square и Circle.Я также хотел бы скрыть конструктор для этих классов и создать фабричный метод getNewShape, который на основе аргумента решит, какой конкретный c'tor использовать.В Java я бы просто написал (в форме):
public static <T extends Shape> T getNewShape(T reference){
// my logic
reference = T.class.getInstance();
return reference;
}
в Typescript, я хотел бы сейчас использовать его так:
let myShape = Square.getNewShape(myShape);
Я читал в других вопросах, которые я могу использовать:
in the consumer:
let myShape = Square.getNewShape(myShape, Square);
in Shape:
public static <T extends Shape>(ref: T, type): T{
//my logic
reference = new type();
return reference;
}
но я предпочитаю, если я уже вызываю getNewShape из конкретных классов, мне не нужно было бы добавлять Type в параметры, а машинопись просто выводит его из T.
Обновление: добавление полного кода:
class Shape {
constructor(){
}
public static getNewShape<T extends Shape>(ref: T, type: new() => T): T{
if(ref) {
ref.clear();
}
ref = new type();
return ref;
}
protected clear(){
console.log('clearing');
}
}
class Circle extends Shape{
protected constructor(){
super();
}
}
class Square extends Shape{
protected constructor(){
super();
}
}
class App {
private _circle: Circle = null;
constructor(){
}
public setup(){
this._circle = Circle.getNewShape(this._circle, Circle);
}
}