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

时间:2019-08-30 22:21:43

标签: typescript typescript-generics

我有一个CapabilitySet,它表示许多功能的授予。每个键都是一个功能/功能名称,其中大多数值是一个“ Enablement”,而少数是用于限制功能使用的“ Limitation”:

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 }

maxnull时,我可以指定infinitetrue吗?

据此,我还要说一个功能是具有CapabilityName的对象,该对象是基于给定CapabilityName的CapabilityEnablement或CapabilityLimitation。

CapabilitySet将使用映射类型生成类似以下内容的

type Capability<C extends CapabilityName> = C extends CapabilityLimitationName
   ? { [C]: CapabilityLimitation }
   : { [C]: CapabilityEnablement } 

type CapabilitySet = {
   [K in CapabilityName]: Capability;
}

使用字符串文字的并集有可能吗?似乎TS不允许键成为字符串文字,也许是因为联合不一定严格地是字符串?

我目前已经在完整的CapabilitySet中显式定义了键,这对于代码完成和typedoc似乎更好,但是我很好奇如果我想要这种级别的粒度,可能会发生什么。

0 个答案:

没有答案