機能リクエストは問題に関連していますか?
ネイティブDOM要素にカスタムイベントを追加しようとすると、次のエラーが発生します。
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)
カスタムイベントは、Sveltesアクション/使用ディレクティブhttps://svelte.dev/examples#actionsを使用してdiv
要素にディスパッチされます。
希望するソリューションを説明してください
ネイティブDOM要素でSvelteアクションを使用してディスパッチされたカスタムイベントのチェックを入力できます。
検討した代替案を説明してください
divを個々のSvelteコンポーネントに変換することもできますが、ネイティブDOM要素でも機能することが望ましいです。
追加のコンテキスト
これが私がカスタムイベントを聞く方法です:
<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);"
>
Svelteコンポーネントのカスタムイベントの関連プルリクエスト: https ://github.com/sveltejs/language-tools/pull/303
アクションを持つ要素にのみ適用されるようにする方法があるかどうかはわかりません。 しかし、このようにグローバルに利用できるようにすることができます。
declare namespace svelte.JSX {
interface HTMLAttributes<T> {
onswipemove?: (event: CustomEvent<number> & { target: EventTarget & T }) => any;
}
}
「 CustomEvent<any>
にフォールバックする」でタイピングを強化することもできますが、他の人がイベントをタイプミスした場合に「存在しない」エラーをスローするためにタイピングに依存する可能性があるため、これは行いません。アクションを持つ要素にのみ適用される場合は、そのようなもので問題ありませんが、それをどのように実装するかはわかりません。
アクションからタイプを推測することは、ほとんど不可能な作業だと思います。 たぶん、ユーザーがアクションとその可能なイベントを明示的に入力できるようにする方法を見つけることができます。
おかげで、ユーザーにアクションを明示的に入力させるか、 CustomEvent<any>
にフォールバックするタイミングを明示的に選択させるのがおそらく最良のシナリオですが、 @jasonlyu123による解決策で十分です。 素晴らしい仕事をありがとう!
私はこれをもう一度見ました、そして今、私は前進するための最良の方法に分かれています。
use:YY
ディレクティブを使用したDOM要素のon:XX
イベントの場合、エラーを沈黙させることができます。 欠点は、イベントが暗黙的に任意のタイプであるということです。 また、Svelteは本質的に非常に動的であるため、誰かがCustomEventsをバブリングする可能性があるため、すべてのケースをキャッチできるとは限りません。
CustomEvent<any>
フォールバックを追加する基本的に、すべての本質的な要素の型指定に& {[key: string]: CustomEvent<any>}
を追加します。 これは、上記にリストされていない_any_属性がCustomEvent<any>
にフォールバックすることを意味します。 これにより、オプション1の「動的な性質」の問題と「暗黙の任意の」問題が修正されます。ただし、誰かがmyownAttribute
などのカスタム属性を使用する場合も間違っています。
any
フォールバックを追加するオプション2と同様に、 & {[key: string]: any}
フォールバックを追加するだけです。 これは、適合しないものはすべてにフォールバックすることを意味します。 これは、タイプミスを検出しなくなるという犠牲を払って、DOMの動的な性質に最もよく適合します。
最も参考になるコメント
アクションを持つ要素にのみ適用されるようにする方法があるかどうかはわかりません。 しかし、このようにグローバルに利用できるようにすることができます。