Open1

Web Componentsで作ったオリジナルコンポーネントを型宣言で使いやすくする

Tatsumi YamamotoTatsumi Yamamoto
declare global {
  // 既存のHTMLElementTagNameMapをinterfaceによって拡張する
  // これによりタグ名を指定するときに補完が効く
  interface HTMLElementTagNameMap {
   // my-elementというタグ名でMyElementというWebComponentを追加
    "my-element": MyElement; 
  }

 // 既存のHTMLElementEventMapをinterfaceによって拡張する
 // これによりaddEventListenerしたときにevent名の補完が効く
  interface HTMLElementEventMap {
    // 既存のevent名と被らない名前で追加すること(他タグなども影響を受けるため)
    "my-change": Event;
  }
}

みたいにすると

const myElement = document.createElement("my-element") // ここで補完が効く
myElement.addEventListener("my-change", (event) => { // ここで補完が効く
  console.log(event);
});

って感じになる(多分)