Avatar ·

TypeScript错误:索引参数不能是联合类型

大家好!我是 TypeScript 的新手,遇到了一个让我困惑的错误。我试图创建一个对象,其键只能是两种字符串类型:`'user'` 或 `'admin'`。我写了这样的代码: ```typescript type Role = 'user' | 'admin'; interface UserData { name: string; age: number; } // 试图创建一个对象,其中键是角色,值是用 data 户数据 const users: { [key: Role]: UserData } = {}; ``` 但 TypeScript 报错了:*"An index signature parameter type cannot be a union type. Consider using a mapped object type instead"*。我明白索引签名通常适用于 `string`、`number` 或 `symbol`,但为什么不能使用字面量字符串的联合类型呢?它们不也是字符串吗! 我需要确保 `users` 对象只包含 `'user'` 和 `'admin'` 作为键,并且在尝试访问 `users['guest']` 时 TypeScript 能在编译阶段报错。怎样才能正确实现?对于这种情况,是否有其他语法可用?