Puedo hacer esto:
enum DogsKinds { Labrador, Aski } class Dog { name: string; kind: DogKinds; constructor() {} }Y luego inicie un objeto de perro:
const dog = new Dog();Sin embargo, puedo hacer lo mismo con la interfaz:
interface Dog { name: string; kind: DogsKind; } const dog: Dog = { name: 'some name', kind: DogsKinds.Labrador }Y obtenga el mismo resultado, más fácil.
¿Cuáles son las diferencias, cuándo usar la interfaz y cuándo usar las clases? ¿Existe una mejor práctica o regla general?
Parece que es más fácil trabajar con las interfaces, si me equivoco por favor corrígeme.
Creo que una diferencia importante es descubrir en tiempo de ejecución con qué tipo de objeto estás tratando cuando usas la herencia .
Con las clases puedes usar el operador instanceof :
if (animal instanceof Dog) { /* ... */ }Cuando solo usa objetos simples con TypeScript, deberá proporcionar una propiedad adicional para diferenciar los tipos durante el tiempo de ejecución.
type AnimalType = 'dog' | 'cat' interface Dog extends Animal { type: 'dog' name: string; kind: DogsKind; } if (animal.type === 'dog') { /* ... */ }