typescript - 如何使用枚举来确定要从 TypeScript 中的导入中使用哪个项目?
问题描述
概述
我们有一个从其他文件导出对象的模块。
为简单起见,我们称之为Vehicle
. 它导出Car
、Boat
和Plane
。
我们有一个对应于这些车辆的枚举,假设如下:
enum Vehicles {
Car,
Boat,
Plane,
}
我们希望使用枚举来指定我们应该使用哪个导入的对象。
问题
我们知道我们可以做一个开关/案例,但是随着我们的枚举增长,这变得不必要了。我们的一些类导出了几十个对象的变体,然后我们在其他地方使用(我们无法使用类型/接口来简化)。
switch(vehicle) {
case Vehicles.Car: {
return Car;
}
case Vehicles.Boat: {
return Boat;
}
case Vehicles.Plane: {
return Plane;
}
}
更多信息
我们将 TypeScript 与 Svelte 一起使用。导入是一个包(例如 Google Charts [charts]、fortawesome [icons] 等)。我们正在寻求创建一种包装器来轻松初始化特定组件。
例子:
<script lang="ts">
import { a, b, c } from x
const y = () => {
// logic here
}
</script>
<y/>
这个问题似乎是特定于 TypeScript 的,所以我故意在我的问题中省略了 svelte 标签
解决方案
所以我尝试了一些东西,在这里你可以看到它们:
我原本想做的事
我试图将类分配给枚举属性,但它不起作用。我如何想象它是这样的:
enum Vehicle {
Car = Car,
Boat = Boat,
Plane = Plane,
}
但是 TypeScript 给了我一个错误。你可以在这里试试。为什么我会这么想?因为您可以像这样为枚举属性赋值:
enum Char {
A = 65,
B = 66,
C = 67,
D = 68,
// ...
}
但正如您所看到的,它不适用于您的情况。
一个可能的解决方案
你可能会忘记使用枚举。TypeScript 中有一个特殊功能,as const
. 它使数组或对象字面量成为常量。这看起来像这样:
const Vehicle = {
Car,
Boat,
Plane
} as const;
为什么我不使用值?这称为属性短路(或类似的东西)。当你有一个变量或一些命名的东西并想用相同的属性名称使用它时,你不必指定一个。这是使用as const
版本的示例。
当您想通过索引获取类时怎么办?
您可以使用Object.keys
来获取键数组。它看起来像这样:
const index = 1;
const keys = Object.keys(Vehicle);
const vehicle = Vehicle[keys[index]];
我不会在这里添加链接,因为它并不重要。
推荐阅读
- reactjs - 如何修复'动作必须是普通对象。使用自定义中间件进行异步操作。
- c - 格式化打印指针值
- ansible-awx - 如何向 AWX docker 添加回调插件
- c# - 在循环中突然停止的特定路径中创建 (N) 个目录
- rpa - 如何在搜索框中输入我的击键?
- kotlin - 从多个 Kotlin Coroutines 挂起函数到单个同步函数
- mysql - 仅为 MySQL 中的返回查询设置自定义时区
- javascript - 更好/更快的方法来提取具有条件的嵌套对象上不同深度的匹配属性的值
- python - 为什么使用 strptime 时会出现此 datetime 日期错误
- python-3.x - 如何迭代 Tensorflow 中的张量并在必要时更改其值?