我有一个用 Svelte 5 编写的组件,使用 $props() rune。
LogActions.svelte
<script lang="ts">
//@ts-expect-error
let { onSave }: { (): void } = $props() ;
</script>
<div class="panel fullsize">
<button onclick={onSave}>Log QSO</button>
<button>Delete Last</button>
<button>Undelete</button>
<button>Edit Last</button>
</div>
<style>
.fullsize { width: 100% }
</style>
请注意:如果没有 //@ts-expect-error 指令,该文件会导致 svelte-check 错误
Error: Property 'onSave' does not exist on type '$$ComponentProps'. (ts)
该组件在其父组件 EntryPanel.svelte 中使用,这样:
<script lang="ts">
import LogActions from './LogActions.svelte'
function onSave(): void {
const content = JSON.stringify(Object.fromEntries(qso))
console.log(content)
//@ts-expect-error
window.api.saveQso( content )
}
</script>
...
<LogActions {onSave} />
最后一行生成 svelte-check 错误
c:\Users\jvavruska\dev\log73se\src\renderer\src\components\EntryPanel.svelte:41:16
Error: Object literal may only specify known properties, and 'onSave' does not exist in type '$$ComponentProps'. (ts)
<LogActions {onSave} />
</div>
与打字稿部分中的错误不同,可以通过使用
//@ts-ignore
或 //@ts-expect-error
来避免,对于此错误,我找不到任何指令或提示如何禁用该错误。
结果是,尽管应用程序在开发模式下运行良好,但通过生成无意义的错误来进行精简检查会阻止构建 Windows 的 exe 文件。
我该如何解决这个问题?
我的解决方案最终并不是解决方案,但它解除了构建过程的阻碍。
安装示例电子-svelte脚手架后,package.json中定义了许多脚本:
"scripts": {
"format": "prettier --plugin prettier-plugin-svelte --write .",
"lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix",
"typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
"svelte-check": "svelte-check --tsconfig tsconfig.json",
"typecheck": "npm run typecheck:node && npm run svelte-check",
"start": "electron-vite preview",
"dev": "electron-vite dev",
"build": "npm run typecheck && electron-vite build",
"postinstall": "electron-builder install-app-deps",
"build:unpack": "npm run build && electron-builder --dir",
"build:win": "npm run build && electron-builder --win",
"build:mac": "npm run build && electron-builder --mac",
"build:linux": "npm run build && electron-builder --linux"
},
我的“解决方案”是简单地删除类型检查脚本中对 svelte-check 的调用:
"typecheck": "npm run typecheck:node",
毕竟,在这种情况下,svelte-check 不会带来任何新的好处,因为构建过程(svelte 编译器)报告完全相同的警告(和错误,如果有的话),但不会引发由细长检查。
正如预期的那样,编译为 *.exe 的应用程序运行良好,与开发版本完全相同。