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

161
Views
Implementos mecanografiados

Soy nuevo en Typescript y me encontré con la siguiente pregunta al intentar implementar una interfaz en una clase:

 interface TestInterface { x: number } class Test implements TestInterface { constructor() { this.x = 0 } } // Class 'Test' incorrectly implements interface 'TestInterface'. // Property 'x' is missing in type 'Test' but required in type 'TestInterface'.

Pero si agrego x: number a Test before constructor , funciona. Entonces, supongo que si desea verificar el tipo de una propiedad inicializada en el constructor , debe especificarlo en la clase misma. Entonces, ¿para qué sirve el implement y la interface ? Y si quiero usar la interfaz para verificar el tipo de sus instancias, ¿no sería repetitivo ya que tengo que escribirlo en dos lugares?

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

0

El código en un constructor no es algo que Typescript pueda verificar para determinar si su clase implementa correctamente la interfaz. Sería imposible que Typescript verificara todas las asignaciones en su código para asegurarse de que los tipos sean correctos, por lo que debe declarar los tipos de forma estática. El objetivo de interface y los implements no es reducir la cantidad de código que tiene que escribir, sino declarar el tipo de objetos en su código, de modo que Typescript pueda verificar estáticamente que su código es autoconsistente con respecto a los tipos.

Al decir que la clase implementa la interfaz, le está pidiendo a Typescript que lo mantenga honesto y verifique que los tipos sean realmente consistentes. Si Typescript simplemente confiara en que haría lo correcto en su constructor, ¡no sería muy efectivo! Tenga en cuenta que los constructores pueden contener lógica condicional, bucles y otro código que significa que, incluso en principio, no es posible que Typescript analice el código del constructor para determinar si está manteniendo el contrato al que se compromete con implements .

about 4 years ago · Juan Pablo Isaza Report

0

Entonces, supongo que si desea verificar el tipo de una propiedad inicializada en el constructor, debe especificarlo en la clase misma.

¡Tienes toda la razón!

Entonces, ¿para qué sirve el implemento y la interfaz?

Una interfaz pretende ser un "contrato". Aquí hay un ejemplo simple:

 interface Connectable { connect: () => Promise<void> } const robustConnect = async (connection: Connectable) => { try { await connection.connect(); } catch (error) { console.warn(`there was an error, let's try once more`); await connection.connect(); } }

En este ejemplo, escribimos la función robustConnect para que pueda recibir cualquier objeto que tenga un método de connect . Este es el uso más útil de una interfaz: dar un nombre a un tipo para que sea más legible .

En otros lenguajes OO, una interfaz sería la única forma de declarar un tipo como ese, y tendría que extender la interfaz para usar robustConnect . De lo contrario, el paso de compilación fallaría. Dado que javascript no es inherentemente un lenguaje orientado a objetos y se escribe dinámicamente, esa restricción no existe. Entonces, la palabra clave implements puede parecer inútil. En el mejor de los casos, podría usarlo para ayudarse a sí mismo al escribir clases: simplemente use la palabra clave implements y deje que el compilador de TypeScript le diga lo que se está perdiendo. Pero eso es todo.

Espero que esto ayude.

about 4 years ago · Juan Pablo Isaza Report

0

Low key Necesitas aprender Programación Orientada a Objetos. Su pregunta es un principio básico de oop.

Cuando encuentra un nuevo trabajo, firma un contrato, el contrato especifica su función, deberes, comportamiento y más; por lo tanto, debe seguir el contrato, por lo que si implementa una interfaz, su clase debe seguir la estructura de su interfaz.

Si, por ejemplo, encuentra que es redundante en lugar de crear una clase, use objetos puros

 const obj:Obj ={ name: “eneto” };

Además también su declaración " Pero si agrego x: número a Prueba antes del constructor, funciona. Entonces, supongo que si desea verificar el tipo de una propiedad inicializada en el constructor, debe especificarlo en la clase misma. Entonces, ¿para qué sirve el implemento y la interfaz? ” no tiene sentido, porque mecanografiado verifica su código en la fase de compilación, pero una vez que su código se compila, se convierte en JavaScript que no tiene tipos estáticos

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!