我有一个常数:
const name = 'some/property';
我想定义一个接口,它使用name作为属性的键,类似于在对象声明中使用它,如下所示:
{[name]: 'Bob'}
我尝试了以下内容,但似乎这是在做其他事情:
interface MyInterface {
[name]: string;
}
是动态定义typescript中支持的属性名吗?
答案 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'
的属性。
我想这个答案对您来说太迟了,但是希望它可以对其他人有所帮助。我在自己寻找类似问题的解决方案的早期就发现了这个问题。