我想要做的是:
myArray = [50,100,300,500];
type MyType = {
[myArray]: {name:string,value:string}
};
因此,该对象可以将数组的值作为键.
我知道我可以使用枚举来做到这一点,但我想知道我是否可以以任何方式使用array.
最好的方案是使用数组作为类型参数,但我也不认为这是可能的.
我想要做的是:
myArray = [50,100,300,500];
type MyType = {
[myArray]: {name:string,value:string}
};
因此,该对象可以将数组的值作为键.
我知道我可以使用枚举来做到这一点,但我想知道我是否可以以任何方式使用array.
最好的方案是使用数组作为类型参数,但我也不认为这是可能的.
你走在一条很好的道路上,这里需要的核心功能是Mapped Types.
as const
确保数组类型被推断为[50, 100, 300, 500]
而不是number[]
.
const myArray = [50, 100, 300, 500] as const;
type arrayValues = (typeof myArray)[number];
type MyType = {
[K in arrayValues]?: { name: string, value: string }
};
const foo: MyType = {
"100": { name: 'foo', value: 'bar' }, // OK
"150": { name: 'foo', value: 'bar' }, // KO
}
?
就是关键的选项.如果没有它,您的对象将被要求拥有数组的所有键.