TS keyof typeof An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead.
时间: 2024-09-09 19:14:46 浏览: 155
在TypeScript中,`keyof typeof`关键字用于获取某个类型的属性名(键),但它有一些限制。如果An是一个索引签名的参数类型,其键不能是字面量类型或泛型类型。这意味着如果你试图用字面量(如`'a'`或`number`)或一个通用类型来定义索引,它会报错。
举个例子,当你尝试这样做时可能会遇到错误:
```typescript
type MyMap = {
[K in 'a' | number]: string;
};
// 错误:Type 'string' does not satisfy the constraint '{ "a": string; number: string; }'.
```
在这种情况下,建议使用映射对象类型(Mapped Object Type),它可以动态地根据传入的键类型来创建新的类型。例如,你可以这样替换上面的类型定义:
```typescript
type MyMap = {
[K in Extract<'a', string> | Extract<number, number>]: string;
};
```
这里`Extract`函数帮助我们从`'a'`和`number`中提取实际可以使用的类型,从而避免了字面量和泛型类型的限制。
阅读全文