【发布时间】:2020-09-06 05:08:27
【问题描述】:
我有一个对象,它存储与其他对象相关的值,以它们的数字 id 为键。
const values = {
1: 0.5, // id 1
2: 0.8, // id 2
}
但是还有一个特殊的异常键,字符串 id 为 'all',所以对象可能如下所示:
const values = {
'all': 0.3,
1: 0.5,
2: 0.8,
}
我已经创建了type ObjectId = number | 'all',它可以很好地在我的应用程序中传递混合类型 ID,但在键入上述值对象的索引签名中却无法正常工作。如果我按照我在其他地方看到的混合类型索引签名:
type ObjectId = number | 'all';
interface Values {
[id in ObjectId]: number;
}
编译成
interface Values {
[id: number]: number;
'all': number;
}
这使得'all' 属性是必需的,所以像我的第一个示例这样的对象会引发类型错误。
如何为这个对象编写一个接口,将键限制为numbers or the string 'all' 而无需做任何事情?
【问题讨论】:
标签: typescript