所以我有一个启用了TypeScript的Svelte
应用程序,但现在我在运行它时遇到了问题:
[!] Error: Unexpected token (Note that you need plugins to import files that are not JavaScript)
src\api.ts (4:7)
2:
3: export default class API {
4: url:string;
^
5:
我不明白,因为应用程序之前正在工作,突然提出了这个错误。似乎与TypeScript for Svelte相关的一些版本被更改:
{
"name": "...",
"version": "...",
"private": ...,
"scripts": {
"build": "rollup -c",
"dev": "rollup -c -w",
"start": "sirv public --no-clear",
"validate": "svelte-check",
"check": "svelte-check --tsconfig ./tsconfig.json" /* + ADDED */
},
"devDependencies": {
"@rollup/plugin-commonjs": "...",
"@rollup/plugin-json": "...",
"@rollup/plugin-node-resolve": "^13.1.3",
"@rollup/plugin-typescript": "^8.0.0",
/* @smui/... stuffs */
"@tsconfig/svelte": "^2.0.0", /* ^1.0.0 -> ^2.0.0 */
"rollup": "^2.67.0",
"rollup-plugin-css-only": "^3.1.0",
"rollup-plugin-livereload": "^2.0.5",
"rollup-plugin-svelte": "^7.1.0",
"rollup-plugin-terser": "^7.0.2",
"svelte": "^3.46.3",
"svelte-check": "^2.0.0", /* ^1.0.0 -> ^2.0.0 */
"svelte-preprocess": "^4.0.0",
"tslib": "^2.0.0",
"typescript": "^4.0.0"
},
"dependencies": {
"sirv-cli": "^2.0.2",
"svelte-material-ui": "..."
}
}
/* Note: I replaced some unrelated properties/version by '...'. */
当然,执行npm install
并没有什么帮助,如果我只是删除:string
,它将对代码中的所有其他:<type>
抛出相同的错误。
请注意,该文件名为.ts
,VSCode不会在这些文件中检测到任何语法错误。
配置文件(编辑)
一个二个一个一个
无文件svelte.config.js
2条答案
按热度按时间pqwbnv8z1#
所以,我尝试在docker容器中执行我的应用程序,看看它是否能工作,并得到了一个不同的错误消息,更有帮助:
实际上,文件名不是
./api.js
,而是./API.ts
(在将其重命名为TS后忘记更改导入...)所以我这样修改了import:
靶区;DR
import x from file.js
是否应该是TS文件,并将其替换为import x from file
(不应编写.ts
扩展名)解释:
它试图导入一个JavaScript(
.js
)文件,但找到了TypeScript文件(.ts
)并将其导入(似乎它只关心“basename”),但没有TypeScript支持,造成了这种奇怪的情况,它没有在.ts
文件中重新识别TypeScript语法。goucqfw62#
在启用了Typescript的最新svelte模板中设置了我的项目后,当试图将类型导入.svelte文件时,遇到了类似的“意外令牌”问题,不是在代码编辑器中,而是在服务器中。
修复方法是将svelte.config.js中的预处理选项显式设置为
vitePreprocess()
。这是意外的,因为svelte文档(当前)声明,如果在安装过程中启用了Typescript,则默认情况下会包含此选项!https://kit.svelte.dev/docs/integrations#preprocessors