Svelte 不允许我在组件主体中使用导出的枚举 (TypeScript)

Svelte Won't Allow Me to Use an Exported Enum (TypeScript) in the Component Body

我有以下代码...

<script lang="ts">
    import { TToken } from "./global.d";
    const value:TToken = TToken.X;
</script>
{#if value == TToken.X}
    Hi There!
{:else}
    I don't like you
{/if}

这里是 global.d.ts:

/// <reference types="svelte" />
export enum TToken {
    X = 'X',
    O = 'O',
    Blank = ' '
}

当我运行npx svelte-check时,没有发现任何错误。但是当我尝试通过 npm 运行 dev 运行 苗条时,我得到以下信息:

rollup v2.56.2
bundles src/main.ts → public\build\bundle.js...
[!] Error: Unexpected token (Note that you need plugins to import files that are not JavaScript)
src\global.d.ts (2:7)
1: /// <reference types="svelte" />
2: export enum TToken {
          ^
3:     X = 'X',
4:     O = 'O',
Error: Unexpected token (Note that you need plugins to import files that are not JavaScript)
    at error (C:\svelte-test\node_modules\rollup\dist\shared\rollup.js:151:30)
    at Module.error (C:\svelte-test\node_modules\rollup\dist\shared\rollup.js:10059:16)
    at Module.tryParse (C:\svelte-test\node_modules\rollup\dist\shared\rollup.js:10462:25)
    at Module.setSource (C:\svelte-test\node_modules\rollup\dist\shared\rollup.js:10365:24)
    at ModuleLoader.addModuleSource (C:\svelte-test\node_modules\rollup\dist\shared\rollup.js:19708:20)
    at ModuleLoader.fetchModule (C:\svelte-test\node_modules\rollup\dist\shared\rollup.js:19764:9)
    at async Promise.all (index 1)
    at ModuleLoader.fetchStaticDependencies (C:\svelte-test\node_modules\rollup\dist\shared\rollup.js:19790:34)
    at async Promise.all (index 0)
    at ModuleLoader.fetchModule (C:\svelte-test\node_modules\rollup\dist\shared\rollup.js:19766:9)

我用谷歌搜索发现有人报告了类似的问题,但 none 我发现的解决方案适用于我的案例。例如,有人说问题是 plugins 和 watch 需要在 rollup 的外部输出,但我已经是这样了。

删除导出当然会导致 svelte-check 失败。

有人知道这个问题的解决方法吗?我需要能够将我的枚举放在单独的文件中,所以我不能在组件中声明它。

谢谢!

由于您已经在项目中使用 typescript,因此您可以直接使用一个简单的 .ts 文件。你经常看到一个 types.ts 例如:

// types.ts

export enum TToken {
    X = 'X',
    O = 'O',
    Blank = ' '
}

Rollup 然后能够为您生成非打字稿项目所需的 .d.ts 文件。

它不适用于 d.ts 文件,因为 d.ts 文件没有运行时等效项 - 它们仅在编译时存在以进行类型检查。然而,.ts 文件被转译为 .js 文件,你的开发 server/rollup 会找到这些文件。