Имена родовых свойств интерфейса Typescript - PullRequest
0 голосов
/ 07 сентября 2018

Скажем, у нас есть две переменные

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

и у нас есть функция

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

Этот интерфейс должен выглядеть как

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

Можно ли создать интерфейс, как обычно, вызывая переменные x, y

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

1 Ответ

0 голосов
/ 07 сентября 2018

Да, вы можете сделать это начиная с TypeScript 2.7, с свойствами с постоянными именами , представленными в запросе на извлечение Microsoft / TypeScript # 15473 . Единственное, чего вам не хватает, это того, что вам нужно использовать синтаксис вычисляемого свойства (имя свойства должно быть заключено в квадратные скобки):

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

Надеюсь, это поможет. Удачи!

...