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

ctw*_*els 7 typescript

概述

我们有一个从其他文件导出对象的模块。

为简单起见,我们称之为Vehicle. 它出口CarBoatPlane

我们有一个对应于这些车辆的枚举,假设如下:

enum Vehicles {
    Car,
    Boat,
    Plane,
}
Run Code Online (Sandbox Code Playgroud)

我们希望使用枚举来指定我们应该使用哪个导入的对象。


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

switch(vehicle) {
    case Vehicles.Car: {
        return Car;
    }
    case Vehicles.Boat: {
        return Boat;
    }
    case Vehicles.Plane: {
        return Plane;
    }
}
Run Code Online (Sandbox Code Playgroud)

更多信息

我们在 Svelte 中使用 TypeScript。导入是一个包(例如 Google Charts [charts]、fortawesome [icons] 等)。我们希望创建一种包装器来轻松初始化特定组件。

例子:

<script lang="ts">
    import { a, b, c } from x
    const y = () => {
        // logic here
    }
</script>

<y/>
Run Code Online (Sandbox Code Playgroud)

这个问题似乎是特定于 TypeScript 的,所以我特意从我的问题中省略了 svelte 标签

小智 0

您可以使用以下地图

const vehicleComponentsMap: Record<Vehice, SvelteComponent> = {
   [Vehicle.Car]: Car,
   ....
}
Run Code Online (Sandbox Code Playgroud)

然后,如果您对车辆实现文件有约定,则可以使用它来动态构建此地图(通过按约定从文件收集数据)。