Typescript 接口通用属性名称

Posted

技术标签:

【中文标题】Typescript 接口通用属性名称【英文标题】:Typescript interface generic property names 【发布时间】: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;

【问题讨论】:

github.com/Microsoft/TypeScript/wiki/… Typescript interface, using string constants for properties的可能重复 这能回答你的问题吗? Typescript interface, using string constants for properties 【参考方案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 是从单独的类中导入的,因此接口在运行时而不是编译时可以访问这些值。因此,不幸的是,它拒绝了这种方法。 您应该能够在编译时在单独的类中访问它们,但是我当然不知道您的设置...如果您想要更多信息,您应该使用相关信息编辑您的问题有针对性的回答;如目前所述,上述答案确实适用于您的问题。

以上是关于Typescript 接口通用属性名称的主要内容,如果未能解决你的问题,请参考以下文章

在 TypeScript 中获取类方法的名称

Typescript 扩展通用接口

Typescript接口属性为string

Typescript Interfaces(接口)添加任意key值/内容

用于接口属性的 TypeScript jsdoc

在 Typescript 中实现接口时如何定义私有属性?