typescript - 类型在 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
解决方案
正如 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 上的示例
推荐阅读
- ruby-on-rails - 使用 Kaminari 在同一页面上对同一模型的多个对象进行分页
- java - 带有可选字段的 JPA 存储库 findAll
- clojure - 如何从传递的参数在宏中创建符号
- excel - 插入操作的 Excel 验证
- common-lisp - 在 clisp 中定义对象
- html - 在 Bootstrap 4 网格列中垂直对齐内容的最佳方法是什么?
- javascript - 使用jquery与html表相同的宽度和高度
- javascript - 为什么我能够使用 this.state 而无需绑定或使用箭头函数 React
- ios - 无法将从 Firebase 检索到的数组项输出到 Swift 中的 UITableView
- python - Pandas 列总和基于行