打字稿:使用字符串的子集作为[键:子集]

时间:2020-04-18 18:54:15

标签: typescript typescript-typings

是否有任何方法可以指示我想将除特定值(字符串子集)以外的任何字符串用作键的Typescript编译器。要获得这种工作方式,请执行以下操作:

{ category: string; [key: Exclude<string, 'category'>]: number }

在这种情况下,我得到了:

TS1336索引签名参数类型不能为类型别名。考虑使用[key:string]:数字代替

1 个答案:

答案 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