Jelaskan bugnya
Saya mengalami penyelesaian kode yang membingungkan dengan JS dan TS biasa. Tidak yakin apakah saya telah menyiapkan sesuatu yang salah.
Untuk Mereproduksi
lihat penyiapan sederhana dengan komponen Parent.svelte
dan 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>
:Penyelesaian kode pada komponen Anak menunjukkan bar
, baz
, foo
, ref
dll.
diharapkan: hanya foo
dan bar
ref
ada, apa fungsinya?bar
, baz
, foo
semuanya terdaftar sebagai opsional (? :)
diharapkan: bar
opsional, baz
tidak terdaftar, foo
wajib (lihat peringatan konsol).
Penyelesaian kode pada child
-referensi juga membingungkan saya, selain hal-hal terkait svelte2tsx dll .:
foo
terdaftar, meskipun tidak dapat diakses (lihat kesalahan konsol), baz
tidak terdaftar.
diharapkan: foo
tidak terdaftar, baz
terdaftar
Meskipun baz
tidak terdaftar, saya dapat memanggilnya dan berfungsi seperti yang diharapkan (lihat log konsol)
<script lang="typescript"></script>
:// 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>
Penyelesaian kode pada komponen Anak menunjukkan bar
, baz
, foo
, ref
dll.
diharapkan: hanya foo
dan bar
+ dll.
bar
, baz
, foo
semuanya terdaftar sebagai opsional (? :)
diharapkan: bar
opsional, baz
tidak terdaftar, foo
wajib (lihat peringatan konsol).
Penyelesaian kode pada child
-referensi hanya menampilkan $$prop_def
dan $$slot_def
$$prop_def
daftar berisi bar
, baz
, foo
(hanya diharapkan baz
)foo
Saya mendapatkan "Cannot read ..."
-kesalahan, tetapi mengharapkan "Props cannot be read directly from the component ..."
$$prop_def.baz()
tidak berfungsi (lihat kesalahan konsol)child.baz()
berfungsi seperti yang diharapkan (lihat console.log), meskipun tidak terdaftar, tetapi ditandai sebagai kesalahan di VS Code: "Property 'baz' does not exist on type 'Child__SvelteComponent_'. (ts2339)
Penyelesaian kode sebenarnya tampak sangat membingungkan / salah, sehingga saya tidak yakin apakah saya mungkin telah mengonfigurasi sesuatu yang salah? 🤔 Akan sangat menghargai petunjuk apa pun jika berasumsi demikian!
Sistem (lengkapi informasi berikut):
package.json yang relevan
"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"
]
}
Terima kasih!
Anda tidak memiliki kesalahan penyiapan apa pun, Anda baru saja menyadari banyak kekurangannya sekaligus 😃
Ah, oke, terima kasih atas balasan cepatnya!
- foo opsional: Karena Anda tidak memiliki mode ketat, setiap properti ditandai sebagai opsional. Kami mungkin perlu meninjau kembali keputusan ini.
Oke, tidak bisa berbagi pendapat saya tentang atm ini, harus cek dulu / ingat kenapa saya tidak punya atm ini. 🤔
Pembaruan cepat:
$$slot_def
etc memiliki komentar yang memberitahu Anda bahwa ini hanya tentang jenis pemeriksaan dan Anda tidak boleh menggunakan ini.ref
tidak lagi muncul
Komentar yang paling membantu
Anda tidak memiliki kesalahan penyiapan apa pun, Anda baru saja menyadari banyak kekurangannya sekaligus 😃