Typescript:是否可以输入一个数组来包含枚举的每个键

Bry*_*ira 3 arrays enums typescript

是否可以以强制包含 EPostFromField 枚举的每个值的方式键入枚举数组?

这是一个 mongodb 模式,用例是为了以后添加更多枚举时对枚举字段进行验证(即:让编译器抛出错误,因为数组没有枚举所有枚举值)。

作为奖励,我想下一个级别将是一个还保证枚举数组值是唯一的解决方案:)

export const enum EPostFromField {
  Resident = 'resident',
  AdminUser = 'admin-user', // Admin <user name>
  BoardUser = 'board-user', // Board <user name>
  AdminSociety = 'admin-society', // Admin <community name>
  BoardSociety = 'board-society', // Board <community name>
}

showPostAs: {
    type: String,
    default: EPostFromField.Resident,
    enum: [
      EPostFromField.Resident,
      EPostFromField.AdminUser,
      EPostFromField.BoardUser,
      EPostFromField.AdminSociety,
      EPostFromField.BoardSociety,
    ] as EPostFromField[], // DEVNOTE: Improve typing to enforce *every* unique key of enum
  },
Run Code Online (Sandbox Code Playgroud)

Ben*_*ith 5

您可以定义一个字符串枚举并执行以下操作:

enum EPostFromField {
    Resident = "Resident",
    AdminUser = "AdminUser",
    BoardUser = "BoardUser",
    AdminSociety = "AdminSociety",
    BoardSociety = "BoardSociety"
}

const epostFromFieldKeys = Object.keys(EPostFromField);

const epostFromFields = epostFromFieldKeys as EPostFromField[]
Run Code Online (Sandbox Code Playgroud)

您可以在这个Playground 链接中看到它正在运行。

如果您在枚举中唯一地定义字符串值,则数组中的值将是唯一的(!)。