gpt4 book ai didi

typescript - 如何使用枚举来确定从 TypeScript 的导入中使用哪个项目?

转载 作者:行者123 更新时间:2023-12-04 11:32:01 26 4
gpt4 key购买 nike

概述
我们有一个从其他文件导出对象的模块。
为简单起见,我们称之为 Vehicle .它导出 Car , Boat , 和 Plane .
我们有一个对应于这些车辆的枚举,假设如下:

enum Vehicles {
Car,
Boat,
Plane,
}
我们希望使用枚举来指定我们应该使用哪个导入的对象。


我们知道我们可以做一个 switch/case,但是随着我们的枚举的增长,这变得不必要。我们的一些类导出数十种对象变体,然后我们在其他地方使用这些变体(我们无法使用类型/接口(interface)来简化)。
switch(vehicle) {
case Vehicles.Car: {
return Car;
}
case Vehicles.Boat: {
return Boat;
}
case Vehicles.Plane: {
return Plane;
}
}

更多信息
我们在 Svelte 中使用 TypeScript。导入是一个包(例如 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 给了我一个错误。你可以试试 here .为什么我会这么想?因为您可以像这样为枚举属性赋值:
enum Char {
A = 65,
B = 66,
C = 67,
D = 68,
// ...
}
但是正如您所看到的,它不适用于您的情况。

一个可能的解决方案
你可以忘记使用枚举。 TypeScript 中有一个特殊功能, as const .它使数组或对象文字常量。这看起来像这样:
const Vehicle = {
Car,
Boat,
Plane
} as const;
为什么我不使用值?这就是所谓的属性(property)短缺(或类似的东西)。当你有一个变量或一些命名的东西并想用相同的属性名称使用它时,你不必指定一个。 Here是使用 as const 的示例版本。

当您想通过索引获取类时怎么办?
您可以使用 Object.keys获取一组键。它看起来像这样:
const index = 1;
const keys = Object.keys(Vehicle);
const vehicle = Vehicle[keys[index]];
我不打算在这里添加链接,因为它并不重要。

关于typescript - 如何使用枚举来确定从 TypeScript 的导入中使用哪个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66913973/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com