我正在尝试使用Record
类型创建可重用类型。
enum MyKeys {
ALPHA = 'ALPHA',
BETA = 'BETA',
GAMMA = 'GAMMA',
}
interface MyValues {
in: any[];
out: any[];
}
type Case<T> = Record<T, MyValues>;
理想情况下,我可以使用Case<MyKeys>
代替Record<MyKeys, MyValues>
。
类型'T'不满足约束'string |编号符号”。
类型'T'不能分配给类型'symbol'
答案 0 :(得分:3)
类型参数T
必须限制为有效的索引类型:
type Case<T extends string> = Record<T, MyValues>;
答案 1 :(得分:0)
唯一可用于键的有效类型是字符串,数字和符号。 TypeScript为称为PropertyKey
的联合提供了内置别名。
内置Record类型将仅接受其中一种。这就是为什么您的类型构造函数也需要具有相同的约束。
type Case<T extends PropertyKey> = Record<T, MyValues>;