Búsqueda de sitios web

Cuándo usar una interfaz o clase en Typescript


Tengo un escenario sencillo de un inicio de sesión que requiere que el usuario introduzca un correo electrónico y una contraseña en Typescript. Necesito crear algún tipo para que esto sea fuertemente tipado y enviarlo al back-end.

¿Debería esto escribirse como:

export interface UserLogin {
  email: string;
  password: string;
}
//OR
export class UserLogin {
  email: string;
  password: string;
}

¿Y cómo saber cuándo es el escenario para usar cualquiera de estos?

Respuesta #1

En su forma más básica, una clase es esencialmente una fábrica de objetos (es decir, un plano de cómo se supone que debe ser un objeto y luego implementado), mientras que una interfaz es una estructura utilizada únicamente para verificación de tipo.

Mientras que una clase puede tener propiedades y métodos inicializados para ayudar a crear objetos, una interfaz esencialmente define las propiedades y el tipo que un objeto puede tener.

En el escenario que describiste, uno usaría la interfaz para establecer el tipo para UserLogin.

Respuesta #2

Si solo necesitas declarar un tipo personalizado, entonces usa interfaces. En mi opinión, hay una razón muy pragmática: no se transpilan a JavaScript, por lo que el código generado es más corto.

Las interfaces no funcionarán si necesitas instanciar objetos con constructores o usar un framework que los instancie e inyecte. Entonces usa clases o clases abstractas.

Respuesta #3

De hecho, ambos harán el trabajo. Sin embargo, te sugeriría usar interfaces si solo haces verificación de tipos, ya que están diseñadas específicamente para ese propósito.

Las clases y las interfaces son estructuras poderosas que facilitan no solo la programación orientada a objetos, sino también la verificación de tipos en TypeScript. Una clase es un plano a partir del cual podemos crear objetos que comparten la misma configuración: propiedades y métodos. Una interfaz es un grupo de propiedades y métodos relacionados que describen un objeto, pero no proporciona implementación ni inicialización para ellos.

De: https://toddmotto.com/classes-vs-interfaces-in-typescript

Respuesta #4

envíalo al back-end

Enviar clases por la red requiere un esfuerzo adicional: si utilizas el tipo de contenido JSON, tu clase llegará como un objeto simple a tu código de back-end. Consulta numerosas respuestas a esta pregunta que explican cómo convertir JSON de nuevo a un objeto de clase para que sea posible llamar a sus métodos.

Pero dado que la clase en tu pregunta no tiene métodos, no importa, a menos que el código del back-end realice verificaciones en tiempo de ejecución usando instanceof.

Para evitar estos problemas, utilice una interfaz que solo tenga miembros de datos para representar objetos al comunicarse con el back-end.

Artículos relacionados