【发布时间】:2023-02-18 06:34:05
【问题描述】:
我正在使用全新安装的 sveltekit“svelte”:“^3.54.0”,当我尝试使用此代码导入 goto 时
import { goto } from "$app/navigation";
我收到以下打字稿错误
找不到模块“$app/navigation”或其相应的类型声明。 TS(2307)
我已经核对了 node_modules 并且没有修复它。
【问题讨论】:
我正在使用全新安装的 sveltekit“svelte”:“^3.54.0”,当我尝试使用此代码导入 goto 时
import { goto } from "$app/navigation";
我收到以下打字稿错误
找不到模块“$app/navigation”或其相应的类型声明。 TS(2307)
我已经核对了 node_modules 并且没有修复它。
【问题讨论】:
这些类型在 SvelteKit 包 @sveltejs/kit 中,特别是在 @sveltejs/kit/types/ambient.d.ts 中。据我所知,如果安装了软件包,应该会自动选择类型。
tsconfig.json 设置可能也很重要,它应该有一个 extends 条目:
{
"extends": "./.svelte-kit/tsconfig.json",
...
}
可能运行svelte-kit sync 或启动开发服务器以使其设置.svelte-kit 目录。
【讨论】:
如果您使用 if 语句保护您的 goto 并确保 if 语句检查浏览器环境变量,那将是最好的。试试这个代码:
<script>
import {browser} from '$app/environment';
import {goto} from '$app/navigation';
$: {
if(browser && SOME OTHER CONDITION){
RUN YOUR CODE E.G: goto('/route')
}
}
</script>
如果您对此不满意,请查看在 GitHub 上提出的这个ISSUE,它对我有用:https://github.com/sveltejs/kit/discussions/3245
【讨论】: