Typescript 是否可以表示一种对象类型,该对象必须只具有字符串文本并集中的单个键?
我有一个CapabilitySet,它代表了许多功能的授权。每个键都是一个功能/功能名称,其中大多数值是“启用”,但少数值是一个“限制”,用于调节功能的使用:Typescript 是否可以表示一种对象类型,该对象必须只具有字符串文本并集中的单个键?,typescript,typescript-generics,Typescript,Typescript Generics,我有一个CapabilitySet,它代表了许多功能的授权。每个键都是一个功能/功能名称,其中大多数值是“启用”,但少数值是一个“限制”,用于调节功能的使用: type CapabilityEnablementName = 'feature_toggled_by_enablement' // | etc... type CapabilityLimitationName = 'feature_toggled_by_limit' // | etc... type CapabilityName =
type CapabilityEnablementName = 'feature_toggled_by_enablement' // | etc...
type CapabilityLimitationName = 'feature_toggled_by_limit' // | etc...
type CapabilityName = CapabilityEnablementName & CapabilityLimitationName
type CapabilityEnablement = { enabled: boolean }
type CapabilityLimitation = { infinite: boolean; max: number | null }
当infinite
为true
时,我可以指定max
为null
吗?
由此,我还想说,单个功能是一个具有CapabilityName的对象,它是CapabilityEnablement或基于给定CapabilityName的CapabilityMitation
CapabilitySet将使用映射类型生成以下内容:
type Capability<C extends CapabilityName> = C extends CapabilityLimitationName
? { [C]: CapabilityLimitation }
: { [C]: CapabilityEnablement }
type CapabilitySet = {
[K in CapabilityName]: Capability;
}
type Capability=C扩展CapabilityLimitionName
? {[C]:能力限制}
:{[C]:CapabilityEnablement}
类型能力集={
[K in CapabilityName]:能力;
}
字符串文字的并集是否可能实现这一点?TS似乎不允许键为字符串文字,可能是因为并集可能不是严格意义上的字符串
目前,我在一个完整的CapabilitySet中明确定义了这些键,这对于代码完成和typedoc来说似乎更好,但我很好奇,如果我想要这种粒度级别,可能会发生什么
键入CapabilityName=CapabilityEnablementName和CapabilityLimitationName
您是故意在这里使用&
?这是一个交集,而不是一个并集,从示例中的代码来看,它的计算结果将是从不
。您只是在寻找记录
,而不是{[C]:…}
?看到这类看起来像多个问题…“当infinite为true时,我可以指定max为null吗?”类型capabilityMitation={infinite:true;max:null}|{infinite:false;max:number}
。虽然请注意,Infinity
是一个number
,因此您可能不需要单独的字段。这是两个问题,但前者不太重要。在这种情况下,无穷大在JSON中不是一个可能的值(我想我可以从类型fest扩展JSONObject类型)?如果没有用例或一个实例,很难知道我是否理解你想要什么。