我想要做的是:

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
}

?就是关键的选项.如果没有它,您的对象将被要求拥有数组的所有键.

Playground

Typescript相关问答推荐

在TypScript手册中可以视为接口类型是什么意思?

类型脚本泛型最初推断然后设置

如何正确地对类型脚本泛型进行限制

如何在TypeScrip中使用嵌套对象中的类型映射?

在MessageStore对象中实现条件类型时出现TypeScrip错误

扩展参数必须具有元组类型或传递给REST参数

为什么在leetcode问题的测试用例中,即使我确实得到了比预期更好的解决方案,这段代码也失败了?

TypeScrip泛型类未提供预期的类型错误

以Angular 执行其他组件的函数

如何获取受类型脚本泛型约束的有效输入参数

RXJS将对键盘/鼠标点击组合做出react

打字错误TS2305:模块常量没有导出的成员

是否可以在类型脚本中定义条件返回类型,而不在函数体中使用类型转换?

埃斯林特警告危险使用&as";

在类型脚本中创建显式不安全的私有类成员访问函数

如何使用警告实现`RecursiveReadonly<;T>;`,如果`T`是原语,则返回`T`而不是`RecursiveReadonly<;T>;`

参数未映射泛型返回类型

剧作家测试未加载本地网址

当受其他参数限制时,通用参数类型不会缩小

解析错误:DeprecationError: 'originalKeywordKind' 自 v5.0.0 起已被弃用,无法再使用