Necesito hacer análogo del literal clase Java con los genéricos a máquina de escribir.
Esta es mi clase de la clase:
class Class<T> {
public getName(): string {
return ...;
}
}
Y este es mi intento de crear literal clase.
declare global {
interface Object {
class<T extends object>(this: T): Class<T>;//LINE X
}
}
Por ejemplo, para la clase Foo
quiero conseguir literal de esta manera: Foo.class()
. Sin embargo, en la línea XI tener algún error porque devuelve Class<typeof Foo>
en lugar de Class<Foo>
. ¿Como arreglarlo?
Dado que esto está destinado a ser llamado en clases, tendrá una restricción de T
asegurarse de que el método sólo aparece en las clases. Esto se puede hacer utilizando una firma constructora ( new (...a: any[])=> any
)
Dado que T
es un tipo de clase y desea que el tipo de instancia se puede utilizar el tipo de condicional predefinido InstanceType
para obtener el tipo de instancia del tipo de clase:
declare global {
interface Object {
class<T extends new (...a: any[])=> any>(this:T): Class<InstanceType<T>>;
}
}