是否有任何方法可以指示我想将除特定值(字符串子集)以外的任何字符串用作键的Typescript编译器。要获得这种工作方式,请执行以下操作:
{ category: string; [key: Exclude<string, 'category'>]: number }
在这种情况下,我得到了:
TS1336索引签名参数类型不能为类型别名。考虑使用[key:string]:数字代替。
答案 0 :(得分:0)
您需要使用映射的类型来实现这一点,但是Exclude
不能与string
类型一起使用,它只能与联合类型一起使用,而字符串不是联合。 Exclude<string, 'anything'>
的结果仅在证明下方string
。
type StillOnlyString = Exclude<string, 'anything'>
为了实现排除,我们需要提供一个类型变量,该变量将是我们在对象中拥有的键的并集。考虑:
type WithCategory<Keys extends string> = {category : string} & {
[K in Exclude<Keys,'category'>]: number
}
const x: WithCategory<'other'> = {
category: 'str',
other: 1
}
它可能有点冗长,但是我们确保category
字段始终为字符串,而其他字段均为number
。