TypeScript:从特定类型创建字符串的联合类型

TypeScript:从特定类型创建字符串的联合类型,typescript,types,Typescript,Types,我有一个类型IconName,如下所示: 输入IconName='cars'|'mars'|'truck'|'warning' 然后,我想创建另一种类型的VehicleConName,其中包含与车辆名称相关的所有图标: 类型VehicleConName=‘汽车’|‘卡车’ 但我如何告诉TypeScript VehicleConName中的每个字符串也必须是IconName类型 所以我不能写这个: 类型VehicleConName='cars'|'truck'|'invalidIconName'

我有一个类型IconName,如下所示:

输入IconName='cars'|'mars'|'truck'|'warning' 然后,我想创建另一种类型的VehicleConName,其中包含与车辆名称相关的所有图标:

类型VehicleConName=‘汽车’|‘卡车’ 但我如何告诉TypeScript VehicleConName中的每个字符串也必须是IconName类型

所以我不能写这个:

类型VehicleConName='cars'|'truck'|'invalidIconName'
可以添加辅助对象类型:

type Subset<Parent, Sub extends Parent> = Extract<Parent, Sub>;

type IconName = 'cars' | 'mars' | 'truck' | 'warning'

type VehicleIconName = Subset<IconName, 'cars' | 'truck' | 'invalidName'>
最后一行出错:

类型“cars | truck | invalidName”不满足约束“IconName”。 类型“invalidName”不可分配给类型“IconName”。ts2344


可以添加辅助对象类型:

type Subset<Parent, Sub extends Parent> = Extract<Parent, Sub>;

type IconName = 'cars' | 'mars' | 'truck' | 'warning'

type VehicleIconName = Subset<IconName, 'cars' | 'truck' | 'invalidName'>
最后一行出错:

类型“cars | truck | invalidName”不满足约束“IconName”。 类型“invalidName”不可分配给类型“IconName”。ts2344


是的,乔汉·肖邦:也许吧;至少我想不出其他方法。您可以通过使子集类型等于Extract而不是Sub来改进子集类型。否则,尽管VehicleConName的定义会引发错误,但const x:VehicleConName=invalidName仍然是一个有效的赋值。@ftm:立即报告这些错误可能是个好主意,谢谢你的建议。是的,乔汉·肖邦的作品很有魅力:也许吧;至少我想不出其他方法。您可以通过使子集类型等于Extract而不是Sub来改进子集类型。否则,尽管VehicleConName的定义会引发错误,但const x:VehicleConName=invalidName仍然是一个有效的赋值。@ftm:立即报告这些错误可能是个好主意,谢谢你的建议。