• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

127
Vistas
Función mecanografiada que toma la interfaz extendida como entrada

Tengo una interfaz (en el ejemplo se llama "Ejemplo") que incluye un tipo de función ("exampleFunction"), pero esta función toma una superclase como parámetro de entrada, y mecanografiado informa un error que indica que no puedo usar subtipos como entrada porque tienen algunas propiedades que no están presentes en el supertipo.

Aquí hay un ejemplo:

 interface SuperType { propertyA: string } interface SubTypeA extends SuperType { subPropertyA: number } interface SubTypeB extends SuperType { subPropertyB: number } interface Example { exampleFunction: (input: SuperType) => void }

tengo un problema si escribo:

 const example: Example = { exampleFunction: (input: SubTypeA) => {console.log("nothing")} }
about 3 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El problema es más fácil de detectar si hace que su función use solo la propiedad SubTypeA .

 const example: Example = { exampleFunction: (input: SubTypeA) => {console.log(input.subPropertyA.toFixed())} }

La función en sí es perfectamente válida (acepta un argumento SubTypeA y accede a una de las propiedades. Sin embargo, el tipo Example solo puede garantizar que se pase un SuperType . Por lo tanto, no se puede garantizar que existan las otras propiedades únicas de SubTypeA .

Por ejemplo:

 const superType: SuperType = { propertyA: 'foo' } example.exampleFunction(superType) // valid call, but crashes because `subPropertyA` doesn't exist

¿Quizás una solución es hacer que su función maneje un SuperType o un SubTypeA ?

 const example: Example = { exampleFunction: (input: SuperType | SubTypeA) => { if ('subPropertyA' in input) { console.log(input.subPropertyA.toFixed()) } } } const superType: SuperType = { propertyA: 'foo' } example.exampleFunction(superType) // works const subTypeA: SubTypeA = { propertyA: 'foo', subPropertyA: 123 } example.exampleFunction(subTypeA) // works

Patio de juegos

about 3 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda