¿Puedo decirle a TypeScript que un tipo genérico tiene un constructor?
Creo que puedo hacer algo así para crear una nueva instancia de un Genérico en TypeScript:
class Tree<T extends SomeInterface> {
constructor(private elementType: {new(): T}) {
}
public Grow() {
var newElement: T = new this.elementType();
// ...
}
}
¿Pero hay alguna manera de hacer que TypeScript sepa que un genérico tiene un new()? En otras palabras, ¿hay alguna manera de hacer que algo como esto funcione?
class Tree<T extends SomeInterface> { // <-- Modify the constraint?
public Grow() {
var newElement: T = new T();
// ...
}
}
Respuesta #1
¿Pero hay alguna manera de hacer que TypeScript sepa que un Genérico tiene un new()? En otras palabras, ¿hay alguna manera de hacer que algo así funcione?
No exactamente. La razón es que todavía necesitas pasar la entidad que creará el objeto por ti. No puedes simplemente usar la restricción en tiempo de compilación<T> como un new T en tiempo de ejecución.
interface SomeInterface{
}
interface SomeInterfaceConstructor<T extends SomeInterface>{
new (): T;
}
class Tree<T extends SomeInterface> {
constructor(private elementType: SomeInterfaceConstructor<T>) {
}
public Grow() {
var newElement = new this.elementType();
// ...
}
}
