【问题标题】:Typescript interface generic property namesTypescript 接口通用属性名称
【发布时间】:2019-02-13 00:59:48
【问题描述】:

假设我们有两个变量

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;
}

【问题讨论】:

标签: typescript interface properties typescript-typings


【解决方案1】:

是的,您可以从 TypeScript 2.7 开始使用 constant-named properties,在拉取请求 Microsoft/TypeScript#15473 中引入。您唯一缺少的是您需要使用computed property syntax(属性名称必须用括号括起来):

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 是从单独的类中导入的,因此接口在运行时而不是编译时可以访问这些值。因此,不幸的是,它拒绝了这种方法。
  • 您应该能够在编译时在单独的类中访问它们,但是我当然不知道您的设置...如果您想要更多信息,您应该使用相关信息编辑您的问题有针对性的回答;如目前所述,上述答案确实适用于您的问题。
猜你喜欢
  • 2019-09-22
  • 2020-02-28
  • 2022-01-09
  • 2018-11-18
  • 2019-04-25
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 2020-02-21
相关资源
最近更新 更多