Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 是否可以表示一种对象类型,该对象必须只具有字符串文本并集中的单个键?_Typescript_Typescript Generics - Fatal编程技术网

Typescript 是否可以表示一种对象类型,该对象必须只具有字符串文本并集中的单个键?

Typescript 是否可以表示一种对象类型,该对象必须只具有字符串文本并集中的单个键?,typescript,typescript-generics,Typescript,Typescript Generics,我有一个CapabilitySet,它代表了许多功能的授权。每个键都是一个功能/功能名称,其中大多数值是“启用”,但少数值是一个“限制”,用于调节功能的使用: type CapabilityEnablementName = 'feature_toggled_by_enablement' // | etc... type CapabilityLimitationName = 'feature_toggled_by_limit' // | etc... type CapabilityName =

我有一个CapabilitySet,它代表了许多功能的授权。每个键都是一个功能/功能名称,其中大多数值是“启用”,但少数值是一个“限制”,用于调节功能的使用:

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类型)?如果没有用例或一个实例,很难知道我是否理解你想要什么。