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 接口通用属性名称的主要内容,如果未能解决你的问题,请参考以下文章