NodeJS Svelte/Typescript错误:类型声明期间的“意外标记”

3j86kqsm  于 2023-03-22  发布在  Node.js
关注(0)|答案(2)|浏览(121)

所以我有一个启用了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

pqwbnv8z

pqwbnv8z1#

所以,我尝试在docker容器中执行我的应用程序,看看它是否能工作,并得到了一个不同的错误消息,更有帮助:

[!] Error: Could not resolve './api.js' from src/App.js`

实际上,文件名不是./api.js,而是./API.ts(在将其重命名为TS后忘记更改导入...)
所以我这样修改了import:

/* Before (not working) */
import API from './api.js'
/* After (Good) */
import API from './API' 

// NB. The filename is really in uppercase for me

靶区;DR

  • 检查导入的import x from file.js是否应该是TS文件,并将其替换为import x from file(不应编写.ts扩展名)

解释:

它试图导入一个JavaScript(.js)文件,但找到了TypeScript文件(.ts)并将其导入(似乎它只关心“basename”),但没有TypeScript支持,造成了这种奇怪的情况,它没有在.ts文件中重新识别TypeScript语法。

goucqfw6

goucqfw62#

在启用了Typescript的最新svelte模板中设置了我的项目后,当试图将类型导入.svelte文件时,遇到了类似的“意外令牌”问题,不是在代码编辑器中,而是在服务器中。
修复方法是将svelte.config.js中的预处理选项显式设置为vitePreprocess()。这是意外的,因为svelte文档(当前)声明,如果在安装过程中启用了Typescript,则默认情况下会包含此选项!https://kit.svelte.dev/docs/integrations#preprocessors

import { vitePreprocess } from '@sveltejs/kit/vite';
 
export default {
  preprocess: [vitePreprocess()]
};

相关问题