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")} }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