在Svelte文件中导出TypeScript类型

19

我想将我在一个文件中定义的类型导出并在另一个文件中导入它。

export type myNewType = {name: string};

当我添加 export 时,linter 显示以下错误:

Modifiers cannot appear here.

我可以通过创建一个新的 ts 文件并从中导入类型来使其工作。 我只是想知道是否有一种方法在 svelte 文件中定义类型。

更新:

我使用 sapper 模板,它将无错误运行,但是当从 svelte 文件导入类型和导出类型时,在 vscode 中会显示错误且 TS 功能不起作用。


我猜这只是一个linter的问题。当你运行TypeScript检查时,它是否正常工作? - johannchopin
没错,它将会无错误地运行。我使用 Sapper 但是导入类型也会显示错误并且自动完成不起作用。 - Alireza
Svelte 中的 TypeScript 支持是非常新的,所以我猜这只是你使用的 linter 的问题(而不是 svelte 使用的 TypeScript 编译器)。你使用的是哪个 linter? - johannchopin
我没有设置任何的代码检查工具,我猜测这是sapper默认的代码检查工具。 - Alireza
2个回答

31

你需要从模块脚本中导出类型,而不是普通脚本。你还需要在普通脚本或模块脚本上添加lang="ts"属性。以下内容可行:

<script context="module" lang="ts">
  export type myNewType = {name: string};
</script>

<script>
  export let aProp: string;
</script>

<p>some html</p>

一般情况下,如果你想从另一个Svelte文件中导入除组件本身以外的内容,你需要在模块脚本中声明该导出项。


这个方法可以工作,但不支持Svelte的原生export let data:在不同的上下文中,它变得不可用,所以我不能像这样导出类型MyDataType = data,因为它来自不同的脚本标签:( - undefined

7

如果有人需要帮助的话,我想提醒一下,我曾经遇到过一个问题:将我在 .ts 文件中声明的自定义类型导入到另一个库文件中:

我的自定义类型声明如下:

export type UserAuth = {
    name: string,
    email: string,
    token: ''
};

在我的 /lib/auth.ts 文件中,我尝试以下方式导入它:
import { UserAuth } from "../types/user.auth";

产生了一个错误,指出类型未被导出。

以下是我解决问题的方法:

import type { UserAuth } from "../types/user.auth";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接