Vyhledávání na webu

Názvy generických vlastností rozhraní v TypeScriptu


Řekněme, že máme dvě proměnné

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

a máme funkci

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

Toto rozhraní by mělo vypadat takto

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

Je možné mít rozhraní vytvořené obecně, například voláním proměnných x, y

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

Odpověď č. 1

Ano, toto můžete udělat od verze TypeScript 2.7 u vlastností s konstantními názvy, zavedených v pull requestu Microsoft/TypeScript#15473. Jediná věc, kterou vám chybí, je, že musíte používat syntaxi počítaných vlastností (název vlastnosti musí být uzavřen v závorkách):

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

Doufám, že to pomůže. Hodně štěstí!