描述错误
我在使用普通JS和TS时都遇到了令人困惑的代码完成过程。 不知道我是否设置错误。
重现
查看带有Parent.svelte
和Child.svelte
组件的简单设置:
// Parent.svelte
<script>
import {onMount} from "svelte"
import Child from "./Child.svelte"
let child
onMount(()=> {
})
</script>
<Child bind:this={child} />`
// Child.svelte
<script>
export let foo
export let bar = undefined
export const baz = () => {
console.log("executed function 'baz'!")
}
</script>
<div>
foo is: <em>{foo}</em><br/>
bar is: <em>{bar}</em>
</div>
<script></script>
JS :子组件上的代码完成显示bar
, baz
, foo
, ref
等。
预期:仅foo
和bar
ref
在那里,它有什么作用?bar
, baz
, foo
都列为可选(?:)
预期值: bar
可选,未列出baz
, foo
强制性的(请参阅控制台警告)。
child
-reference上的代码完成也使我感到困惑,除了svelte2tsx相关的东西等:
列出了foo
,尽管它不可访问(请参阅控制台错误),但没有列出baz
。
预期:未列出foo
已列出baz
尽管未列出baz
,但我可以调用它,并且按预期方式工作(请参阅控制台日志)
<script lang="typescript"></script>
TS版本:// Parent.svelte
<script lang="typescript">
import {onMount} from "svelte"
import Child from "./Child.svelte"
let child:Child
onMount(()=> {
})
</script>
<Child bind:this={child} />`
// Child.svelte
<script lang="typescript">
export let foo: number
export let bar: number = undefined
export const baz = (): void => {
console.log("executed function 'baz'!")
}
</script>
<div>
foo is: <em>{foo}</em><br/>
bar is: <em>{bar}</em>
</div>
子组件上的代码完成显示bar
, baz
, foo
, ref
等。
预期:仅foo
和bar
+等。
bar
, baz
, foo
都列为可选(?:)
预期: bar
可选,未列出baz
, foo
强制性的(请参阅控制台警告)。
child
参考上的代码完成仅显示$$prop_def
和$$slot_def
$$prop_def
,列表包含bar
, baz
, foo
(只希望baz
)foo
我会收到"Cannot read ..."
-错误,但会期望"Props cannot be read directly from the component ..."
$$prop_def.baz()
不起作用(请参阅控制台错误)child.baz()
可以按预期方式工作(请参阅console.log),尽管未列出,但在VS代码中被标记为错误: "Property 'baz' does not exist on type 'Child__SvelteComponent_'. (ts2339)
实际上,代码完成看起来是如此令人困惑/错误,以至于我不确定是否配置了错误的代码? assuming如果有任何暗示,将不胜感激!
系统(请完成以下信息):
相关的package.json
"rollup": "^2.21.0",
"rollup-plugin-svelte": "^5.2.3",
"@rollup/plugin-commonjs": "^14.0.0",
"@rollup/plugin-node-resolve": "^8.4.0",
"@rollup/plugin-typescript": "^5.0.2",
"svelte": "^3.24.0",
"svelte-preprocess": "^4.0.8",
"tslib": "^2.0.0",
"typescript": "^3.9.7"
tsconfig.json
"compilerOptions": {
"target": "es2017",
"strict": false,
"moduleResolution": "node",
"allowJs": false,
"lib": [
"es2017", "DOM"
],
"types": [
"svelte"
],
"baseUrl": "."
},
"include": [
"./src"
]
}
谢谢!
您没有设置任何错误,只是立刻注意到了许多缺点the
嗯,好的,谢谢您的快速回复!
- foo可选:因为您没有严格模式,所以每个道具都标记为可选。 我们可能需要重新考虑这个决定。
好的,不能分享我对这个atm的看法,必须先检查/记住为什么我没有打开它。 🤔
快速更新:
$$slot_def
等有一条评论,告诉您这仅与类型检查有关,您不应使用它。ref
不再显示
最有用的评论
您没有设置任何错误,只是立刻注意到了许多缺点the