🏷️
カスタムイベントの登録と型定義
概要
TypeScriptにおけるカスタムイベントおよびカスタムデータの型定義を行う
作成するカスタムイベント
link
という名前で、カスタムデータにURL
オブジェクトを受け取るカスタムイベントを作成する。
型定義ファイルの作成
src/@types/link-event.d.ts
を作成する。
export {}
declare global {
interface DocumentEventMap {
'link': CustomEvent<URL>
}
}
今回はdocumentにイベント登録するため、DocumentEventMap
を拡張する。
カスタムイベントの型定義をするには、CustomEvent<T>
型のDocumentEventMapに新しいキーを追加する。<T>
にはカスタムデータの型が入る。
カスタムイベントの登録と発火
登録
document.addEventListener('link', e => {
const href = e.detail // URL
})
登録は通常のイベントと同じようにaddEventListener
を使用する。型定義を作成しているため、e.detail
はURLとして補完が効く状態になっている。
発火
const event = new CustomEvent('link', { detail: new URL('/') })
document.dispatchEvent(event)
発火するときは、dispatchEvent()
にCustomEvent
を渡す。Event
ではなく、CustomEvent
であることに注意すること。
カスタムデータはCustomEvent
のインスタンス作成時に、{ detail: カスタムデータ }
の形式で渡す必要がある。
Discussion