首页 > 解决方案 > 类型在 TypeScript 中定义一个枚举

问题描述

我有一个 TypeScript 枚举,它与我尝试使用它的文件位于不同的命名空间中。由于现在不可避免的原因,命名空间很长而且编写起来很麻烦

该项目没有使用模块,也没有模块加载器,因此没有导入或导出。不幸的是,我的双手被绑在这里。我们手动捆绑文件。

enum Movement {
    run,
    walk
}
function Move(movement: App.System.User.Area.Movement) { 
    if (movement === App.System.User.Area.Movement.run) { //... }
    //....
}

我似乎可以使用type关键字来(我不确定这是 TypeScript 的词)类型 def 那个长的命名空间。

type MovementType = App.System.User.Area.Movement;
function Move(movement: MovementType) { 
    if (movement === App.System.User.Area.Movement.run) { //... }
    //....
}

但是我不能在上面的函数中的 equals 比较中使用该类型定义类型,因为当我尝试执行以下操作时,“MovementType 仅指一种类型,但在此处用作值”:

type MovementType = App.System.User.Area.Movement;
function Move(movement: MovementType) { 
    if (movement === MovementType.run) { //... }
    //....
}

有没有办法解决这个问题?为什么我不能在条件语句中使用它,而我可以将它作为参数?我怎样才能绕过我很长的命名空间?


我目前正在使用 TypeScript 3.1

标签: typescriptenums

解决方案


正如 Pac0 提到的,枚举既是一组值又是一个类型。如果导入解决方案不适合您,您可以尝试为类型和值设置别名。

type MovementType = App.System.User.Area.Movement;
const Movement = App.System.User.Area.Movement;
function Move(movement: MovementType) { 
    if (movement === Movement.run) { //... }
    //....
}

TypeScript Playground 上的示例


推荐阅读