es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Diferencia en TypeScript entre los tipos `InstanceType` y `: MyClass`

He estado tratando de entender si hay alguna diferencia entre usar InstanceType para asignar un tipo, o simplemente usar el nombre de la clase.

En particular, dada la clase:

MyClass {

  public static foo: string = 'abc';

  public makeFoo() {
    // increíble fabricante
  }

}

Cuando quiero usar una instancia de la clase, parece que no hay diferencia entre:

// dentro de alguna otra clase
private myClassInstance: InstanceType
...
this.myClassInstance = new MyClass()

y

// dentro de alguna otra clase
private myClassInstance: MyClass
...
this.myClassInstance = new MyClass()

Al menos en VSCode, no veo ninguna diferencia visible al usar cualquiera de los dos. Sin embargo, supongo que debe existir una diferencia si TS ha implementado InstanceType<>.

¿Alguien sabe si hay alguna diferencia?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una diferencia entre usar InstanceType para asignar un tipo y simplemente usar el nombre de la clase para asignar un tipo.

    Cuando usas InstanceType para asignar un tipo, estás especificando que el tipo de la variable es una instancia de la clase, no la clase en sí. Esto significa que solo puedes asignar una instancia de la clase a la variable, no la clase en sí.

    Por otro lado, cuando simplemente usas el nombre de la clase para asignar un tipo, estás especificando que el tipo de la variable es la clase en sí, no una instancia de la clase. Esto significa que puedes asignar la clase a la variable, pero no puedes asignarle una instancia de la clase.

    En tu ejemplo, tanto InstanceType<typeof myclass=""> como MyClass funcionarán porque la clase no tiene argumentos de constructor. Sin embargo, si la clase tuviera un constructor con argumentos, necesitarías usar InstanceType para definir correctamente el tipo de la variable como una instancia de la clase con los argumentos de constructor específicos.

    En general, es importante usar la definición de tipo correcta dependiendo de si quieres almacenar la clase o una instancia de la clase en la variable.

Comments are closed.