実現したいこと
Typescript初学者です。
ドラッグで動かすことができるコンポーネントを実装するために、
EventListenerを管理したいと思っております。
発生している問題・分からないこと
マウスを動かすイベント、マウスを離したときの処理をそれぞれ関数にし、
マウスを押したときにイベントリスナに追加したいのですが、
引数の型が違うためにエラーが発生します。
エラーメッセージ
error
1この呼び出しに一致するオーバーロードはありません。 2 2 中 1 のオーバーロード, '(type: "mousemove", listener: (this: Document, ev: MouseEvent) => any, options?: boolean | AddEventListenerOptions | undefined): void' により、次のエラーが発生しました。 3 型 '(e: MouseEvent) => void' の引数を型 '(this: Document, ev: MouseEvent) => any' のパラメーターに割り当てることはできません。 4 パラメーター 'e' および 'ev' は型に互換性がありません。 5 型 'MouseEvent' には 型 'MouseEvent<Element, MouseEvent>' からの次のプロパティがありません: nativeEvent, isDefaultPrevented, isPropagationStopped, persist 6 2 中 2 のオーバーロード, '(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions | undefined): void' により、次のエラーが発生しました。 7 型 '(e: MouseEvent) => void' の引数を型 'EventListenerOrEventListenerObject' のパラメーターに割り当てることはできません。 8 型 '(e: MouseEvent) => void' を型 'EventListener' に割り当てることはできません。 9 パラメーター 'e' および 'evt' は型に互換性がありません。 10 型 'Event' には 型 'MouseEvent<Element, MouseEvent>' からの次のプロパティがありません: altKey, button, buttons, clientX、18 など。
該当のソースコード
Typescript
1import React, { MouseEvent } from 'react'; 2 3const MouseEventItem: React.FC = () => { 4 5 const handleMouseDown = ( e: MouseEvent ) => { 6 document.addEventListener('mousemove', handleMouseMove); 7 document.addEventListener('mouseup', handleMouseUp); 8 } 9 10 const handleMouseMove = (e: MouseEvent ) => { 11 //処理 12 } 13 14 const handleMouseUp = () => { 15 document.removeEventListener('mousemove', handleMouseMove); 16 document.removeEventListener('mouseup', handleMouseUp); 17 } 18 19 return ( 20 <div onMouseDown={handleMouseDown} /> 21 ) 22} 23 24export default function MouserEventComponent() { 25 return ( 26 <MouseEventItem /> 27 ); 28}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
他の方が書かれているサンプルコードなどを参考にしているのですが、その書き方では特に型を指定する事がありませんでした。
また、同様のエラーが発生する方の忘備録などを参考にしたのですが、
- リスト
"strictFunctionTypes": false
はTypescriptで型定義を厳密にしたいため、今回は採用したくない - リスト
document.addEventListener('mousemove', handleMouseMove as any)
という指定も同様の理由で不採用 - リスト 引数の定義に
event: HTMLElementEvent<HTMLInputElement>
としたところ、'HTMLElementEvent' という名前は見つかりません。
とエラーが発生します。
と、型指定に影響がありそうな箇所は色々試したのですが、どの手段でも解決できず手に負えない次第です。
補足
特になし
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/01/01 01:34
退会済みユーザー
2024/01/03 09:08 編集