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 会找到这些文件。
我有以下代码...
<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 会找到这些文件。