バグを説明する
プレーンな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()
呼び出し"Property 'baz' does not exist on type 'Child__SvelteComponent_'. (ts2339)
コード補完は実際には非常に紛らわしい/間違っているように思われるので、何か間違った構成をしたのかどうかわかりませんか? 🤔そうだとしたら、ヒントをいただければ幸いです。
システム(以下の情報を入力してください):
関連する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"
]
}
ありがとうございました!
セットアップに問題はありません。一度に多くの欠点に気づきました😃
ああ、大丈夫、速い返事をありがとう!
- fooオプション:strictモードがないため、すべての小道具はオプションとしてマークされます。 この決定を再検討する必要があるかもしれません。
さて、このATMについての私の意見を共有することはできません、最初に私がそれを持っていない理由を確認/覚えておく必要があります。 🤔
クイックアップデート:
$$slot_def
などには、これは型チェックのみに関するものであり、これを使用しないでくださいというコメントがあります。ref
は表示されなくなりました
最も参考になるコメント
セットアップに問題はありません。一度に多くの欠点に気づきました😃