Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

119
Views
Cómo comparar 2 clases heredadas en Typescript

Considere que tenemos 2 clases Animal y Dog . Aquí la clase Dog se hereda de la clase Animal .

Necesito verificar el tipo de estos objetos.

Cómo puedo conseguir esto

 class Animal {} class Dog extends Animal {} //This obj can have both classes const mixedObj: Animal | Dog = new Dog(); //---> here When i compare mixedObj with Animal class i need to get `false` but `true` is returned console.log(mixedObj instanceof Animal);// returns: `true` console.log(mixedObj instanceof Dog);// returns: true

tiene alguna otra forma de resolver este problema...?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Fundamentalmente, está preguntando sobre el valor de tiempo de ejecución de mixedObj , que es una cosa de JavaScript en lugar de una cosa de TypeScript.

instanceof Animal será true para cualquier objeto que tenga Animal.prototype en cualquier parte de su cadena de prototipos (normalmente porque fue creado por el constructor Animal , directa o indirectamente [por ejemplo, a través de Dog ]). Si desea ver si mixedObj contiene un Dog , específicamente , y no un Animal , debe mirar la propiedad del constructor :

 class Animal {} class Dog extends Animal {} //This obj can have either class const mixedObj/*: Animal | Dog*/ = new Dog(); console.log(mixedObj.constructor === Animal);// returns: `false` console.log(mixedObj.constructor === Dog);// returns: `true`

Enlace del patio de recreo

Pero , eso es generalmente un antipatrón. Una mejor manera, particularmente porque funcionará con TypeScript en tiempo de compilación, es darle a Dog alguna característica que Animal no tiene y probar esa característica:

 class Animal { } class Dog extends Animal { bark() { console.log("Woof!"); } } //This obj can have either class const mixedObj/*: Animal | Dog*/ = new Dog(); console.log("bark" in mixedObj); // returns: `true` (would be `false` for an `Animal`) if ("bark" in mixedObj) { mixedObj.bark(); // No error, because TypeScript knows that it's a `Dog` }

Enlace del patio de recreo

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!