打字稿:要求枚举中的所有键都是有效类型

Posted

技术标签:

【中文标题】打字稿:要求枚举中的所有键都是有效类型【英文标题】:Typescript: Require all keys in enum for valid type 【发布时间】:2020-08-23 02:21:08 【问题描述】:

在 Typescript 中,我有一个枚举如下:enum User Bob = "Bob", Sally = "Sally"

我想确保一个新类型为每个枚举值定义一个布尔值:

type UserActiveMap 
   User.Bob: boolean
   User.Sally: boolean

但是,我不想列出每个枚举值。 我知道我可以使用keyof typeof,但我不确定如何定义类型以确保这种行为:

type UserActiveMap 
   keyof typeof User: boolean
 // wrong

我要实现的实际实现是:

const rightMap: UserActiveMap =  User.Bob = true, User.Sally = false  // valid
const wrongMap: UserActiveMap =  User.Bob = false  // invalid - missing Sally

有什么建议吗?

【问题讨论】:

【参考方案1】:

原来我很接近语法,但我正在寻找的是:

type UserActiveMap 
   [K in keyof typeof User]: boolean

现在,我可以实现:

const MyMap =  User.Bob = true  // invalid type - missing Sally

【讨论】:

以上是关于打字稿:要求枚举中的所有键都是有效类型的主要内容,如果未能解决你的问题,请参考以下文章

打字稿枚举比较'in'有效,但不是'==='

打字稿:映射类型中的枚举键

字符串枚举类似于打字稿中的类型[重复]

打字稿:如何检查一个值是不是是有效的枚举键值? [复制]

从打字稿类型定义文件中导出枚举

避免任何类型在打字稿中获取枚举值