Supongamos que tengo dos interfaces.
interface AppleReport { name: string, color: string, age: string } interface BananaReport { name: string, color: string, amount: number, }Ahora defino una función. Quiero que esta función tome cada tipo que tenga una clave de nombre y una clave de color .
cosnt doSth = (value: **TODO**) => { // do sth with *value* that contains *name* and *color* }Lo sé, que podría crear una interfaz
interface dummyInterface { name: string, color: string, }y deje que AppleReport y BananaReport amplíen esto, pero me gustaría hacer toda la lógica en la definición del tipo de función.
¿Algunas ideas?
Podrías hacerlo
cosnt doSth = (value: { name : string, color : string } ) => { // do sth with *value* that contains *name* and *color* }pero esto parece desordenado y recomendaría seguir la forma en que no desea y crear una interfaz y luego extender las otras 2 interfaces a partir de ella.
o si no desea extender las otras interfaces, puede usar el tipo de interfaz como el tipo para pasar y no extender. Seguirá funcionando mientras existan los miembros.
interface NameAndColor { name: string, color: string, } interface AppleReport { name: string, color: string, age: string } interface BananaReport { name: string, color: string, amount: number, } const doSth = (value: NameAndColor) => { // do sth with *value* that contains *name* and *color* } let obj = { name : "myName", color : "myColor"}; doSth( obj );Pero realmente, en mi opinión, la mejor manera es hacer que sus interfaces se extiendan.