Búsqueda de sitios web

Nombres de propiedades genéricas de la interfaz de Typescript


Digamos que tenemos dos variables

const x='propiedad1' const y='propiedad2'

y tenemos función

function foo<key extends keyof MapInterface>(name: key, props: (MapInterface[key]))

Esta interfaz debería verse como

interface MapInterface{
'property1':any;
'property2':any;
}

¿Es posible que la interfaz se cree de manera genérica, como llamando a las variables x, y?

interface MapInterface{
x:any; //return 'property1':any;
y:any; //return 'property2':any;
}

Respuesta #1

Sí, puedes hacer esto a partir de TypeScript 2.7, con propiedades con nombres constantes, introducidas en el pull request Microsoft/TypeScript#15473. Lo único que te falta es que necesitas usar la sintaxis de propiedad computada (el nombre de la propiedad debe estar entre corchetes):

const x = 'property1'
const y = 'property2';

interface MapInterface {
  [x]: any;
  [y]: any;
} 

declare const mapInt: MapInterface;
mapInt[x]; // works      
mapInt[y]; // works
mapInt.property1; // also works
mapInt.property2; // also works

Espero que eso ayude. ¡Buena suerte!