Typescript接口泛型属性名称

3

假设我们有两个变量

const x='属性1' const y='属性2'

还有一个函数

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个回答

2
是的,从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

希望能有所帮助。祝好运!

问题在于 x 和 y 是从另一个类中导入的,因此这些值将在运行时而不是编译时对接口可访问。因此,很遗憾,它拒绝了这种方法。 - Abdullah El-Kindy
你应该能够在编译时在一个单独的类中访问它们,但我当然不知道你的设置...如果你想要更有针对性的答案,你应该编辑你的问题并提供相关信息;上面的答案适用于你当前所述的问题。 - jcalz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接