我有一个常数:
const name = 'some/property';
Run Code Online (Sandbox Code Playgroud)
我想定义一个接口,它使用name作为属性的键,类似于在对象声明中使用它,如下所示:
{[name]: 'Bob'}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下内容,但似乎这是在做其他事情:
interface MyInterface {
[name]: string;
}
Run Code Online (Sandbox Code Playgroud)
是动态定义typescript支持的属性名称?
这可以通过 TypeScript 2.1 中引入的映射类型来完成:
const name = 'some/property';
type MyInterface = {
[prop in typeof name]: string;
};
Run Code Online (Sandbox Code Playgroud)
这会强制所有类型的对象MyInterface
都具有名为 的属性'some/property'
。
我想这个答案对你来说太晚了,但希望它可以帮助其他人。我在自己搜索类似问题的解决方案时很早就发现了这个问题。
您必须指定name的类型。无法在对象声明中使用它,但是可以使用[]设置和访问属性值。
interface MyInterface {
[name: string]: string;
}
const n = 'qweq';
let x: MyInterface = {
'a': 'b'
}
x[n] = 'a';
Run Code Online (Sandbox Code Playgroud)
并以这种方式访问它。
x[n]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4552 次 |
最近记录: |