动态地将属性名称添加到typescript接口

时间:2016-10-21 11:08:52

标签: typescript

我有一个常数:

const name = 'some/property';

我想定义一个接口,它使用name作为属性的键,类似于在对象声明中使用它,如下所示:

{[name]: 'Bob'}

我尝试了以下内容,但似乎这是在做其他事情:

interface MyInterface {
  [name]: string;
}

是动态定义typescript中支持的属性名吗?

2 个答案:

答案 0 :(得分:4)

您必须指定名称的类型。在对象声明中无法使用它,但您可以使用[]来设置和访问属性值。

Z

以这种方式访问​​它。

interface MyInterface {
  [name: string]: string;
}
const n = 'qweq';

let x: MyInterface = {
  'a': 'b'
}

x[n] = 'a';

在游乐场here查看。

答案 1 :(得分:1)

这可以通过TypeScript 2.1中引入的映射类型来完成:

const name = 'some/property';
type MyInterface = {
    [prop in typeof name]: string;
};

这会强制所有MyInterface类型的对象具有名为'some/property'的属性。


我想这个答案对您来说太迟了,但是希望它可以对其他人有所帮助。我在自己寻找类似问题的解决方案的早期就发现了这个问题。