Apakah permintaan fitur Anda terkait dengan masalah?
Saya mendapatkan kesalahan berikut ketika saya mencoba menambahkan acara khusus pada elemen DOM asli:
Type '{ onswipestart: (event: CustomEvent<any>) => void; onswipemove: (event: CustomEvent<any>) => void; onswipeend: (event: CustomEvent<any>) => void; style: string; class: string; }' is not assignable to type 'HTMLProps<HTMLDivElement>'.
Property 'onswipestart' does not exist on type 'HTMLProps<HTMLDivElement>'.ts(2322)
Peristiwa khusus dikirim ke elemen div
menggunakan Sveltes actions/use directive https://svelte.dev/examples#actions).
Jelaskan solusi yang Anda inginkan
Mampu mengetik cek untuk peristiwa khusus yang dikirim menggunakan tindakan Svelte pada elemen DOM asli.
Jelaskan alternatif yang telah Anda pertimbangkan
Saya dapat mencoba mengonversi div ke komponen Svelte individual, tetapi sebaiknya itu juga berfungsi pada elemen DOM asli.
konteks tambahan
Inilah cara saya mendengarkan acara khusus:
<div
class="bottomSheet"
class:draggable
bind:this={bottomSheet}
use:swipeable
on:swipestart={handleSwipeStart}
on:swipemove={handleSwipeMove}
on:swipeend={handleSwipeEnd}
style="height:{height};bottom:{bottom};transform:translateY({$coords.ty}px);"
>
Permintaan Tarik Terkait untuk acara khusus pada komponen Svelte: https://github.com/sveltejs/language-tools/pull/303
Tidak tahu apakah ada cara untuk membuatnya hanya berlaku untuk elemen dengan tindakan. tetapi Anda dapat membuatnya tersedia secara global seperti ini.
declare namespace svelte.JSX {
interface HTMLAttributes<T> {
onswipemove?: (event: CustomEvent<number> & { target: EventTarget & T }) => any;
}
}
Kami juga dapat meningkatkan pengetikan kami dengan "kembali ke CustomEvent<any>
tetapi saya lebih suka tidak melakukannya karena orang lain mungkin mengandalkan pengetikan untuk membuat kesalahan "tidak ada" jika mereka salah mengetik suatu acara. oke dengan sesuatu seperti itu jika itu hanya diterapkan pada elemen dengan tindakan, tapi saya tidak yakin bagaimana kita akan mengimplementasikannya.
Untuk menyimpulkan jenis dari tindakan adalah tugas yang hampir mustahil saya pikir. Mungkin kita dapat menemukan cara untuk membiarkan pengguna mengetikkan tindakan secara eksplisit dan kemungkinan kejadiannya.
Terima kasih, membiarkan pengguna mengetik tindakan secara eksplisit atau secara eksplisit memilih kapan harus kembali ke CustomEvent<any>
mungkin akan menjadi skenario kasus terbaik tetapi solusi oleh @jasonlyu123 cukup baik untuk saya sekarang. Terima kasih atas kerja bagusnya!
Saya telah melihat ini lagi dan sekarang saya terpecah tentang apa cara terbaik untuk maju.
Kami dapat membungkam kesalahan jika itu adalah peristiwa on:XX
pada elemen DOM dengan direktif use:YY
. Kekurangannya adalah bahwa acara tersebut bertipe any secara implisit. Itu juga mungkin tidak menangkap semua kasus, karena Svelte bersifat sangat dinamis, seseorang dapat melakukan bubbling CustomEvents.
CustomEvent<any>
fallbackKami pada dasarnya akan menambahkan & {[key: string]: CustomEvent<any>}
ke semua pengetikan elemen intrinsik. Ini berarti atribut _any_ yang tidak tercantum di atas akan kembali ke CustomEvent<any>
. Ini akan memperbaiki masalah "sifat dinamis" dan masalah "implisit apa pun" dari opsi 1. Tetapi juga salah jika seseorang menggunakan atribut khusus seperti myownAttribute
.
any
fallbackSeperti opsi 2, hanya saja kita menambahkan fallback & {[key: string]: any}
. Ini berarti apa pun yang tidak sesuai akan jatuh kembali ke mana pun. Ini paling cocok dengan sifat dinamis DOM dengan biaya tidak lagi salah ketik.
Komentar yang paling membantu
Tidak tahu apakah ada cara untuk membuatnya hanya berlaku untuk elemen dengan tindakan. tetapi Anda dapat membuatnya tersedia secara global seperti ini.