document.querySelector() as HTMLMetaElement; は、JavaScriptおよびTypeScriptで利用できる
「型アサーション」という仕組みを用いた構文です。
このコードを分解して説明すると、以下の通りです。
1. document.querySelector()
document.querySelector() は、指定したCSSセレクタに一致する最初のDOM要素を取得する
メソッドです。
例:
document.querySelector('meta[name="description"]');
このコードでは、name="description" という属性を持つ <meta> タグがHTML内にあれば、
それを取得します。
2. as HTMLMetaElement
as HTMLMetaElement は、TypeScriptの構文で、「型アサーション」と呼ばれます。
ここで指定されている HTMLMetaElement は、<meta> タグを表すDOMインターフェース型です。
型アサーションについて
型アサーション(type assertion)とは、TypeScriptで「この要素は特定の型である」と
明示的に指定するものです。通常、document.querySelector() の戻り値の型は
Element | null です。したがって、TypeScriptでは戻り値の要素が <meta> タグであることが
分かっている場合に as HTMLMetaElement を使用して、この戻り値を HTMLMetaElement 型に
変換(アサート)できます。
3. 実際の使い方
const metaDescription = document.querySelector('meta[name="description"]') as HTMLMetaElement;
if (metaDescription) {
console.log(metaDescription.content);
}
metaDescription変数はHTMLMetaElement | nullとなり、metaDescriptionが
存在する場合は、そのプロパティであるcontentを直接参照できます。
注意点
- 型アサーションを使うと、型の安全性を一部犠牲にするため、
querySelector()の結果が
常に指定した型の要素とは限らない場合には、エラーチェックを追加することを推奨します。
ここで出てくるElement型について、
Element 型は、DOM(Document Object Model)で要素を表現する基本的な
インターフェースです。HTMLやXML文書内のすべての要素は、DOMツリー上で Element 型として扱われます。
Element は、HTMLElement, SVGElement など、特定の要素タイプの基本となる型です。
具体的には、<div>、<span>、<img> などのHTML要素だけでなく、SVGやその他の
XMLベースの要素も Element 型を継承しています。
Element 型の特徴
- 基本的なプロパティとメソッド
Element型には、DOMの要素を操作するための基本的なプロパティやメソッドが
含まれています。たとえば、以下のようなプロパティやメソッドが含まれます:classList: 要素のクラスを操作するためのインターフェース。id: 要素のID。tagName: 要素のタグ名(例:DIV,SPAN)。getAttribute(),setAttribute(): 要素の属性を取得・設定するメソッド。children: その要素のすべての子要素を取得するプロパティ。
- 型の抽象性
Element型はすべての要素型の基盤となるため、汎用的にどんな要素でも参照できる反面、
具体的な要素(例えば<input>や<img>など)の持つ特定のプロパティには
アクセスできません。 - 特定の要素型との違い
特定の要素には、それぞれ専用の型が存在します。例えば、HTMLInputElementは
<input>タグに特化した型で、valueプロパティなど<input>タグ専用のプロパティに
アクセスできますが、Element型にはvalueプロパティはありません。
具体例
const element = document.querySelector("#my-element");
if (element instanceof Element) {
console.log(element.tagName); // OK: Element には tagName プロパティがある
// console.log(element.value); // NG: Element 型には value プロパティがない
}
型アサーションでの具体的な使い方
Element 型をより具体的な型(例えば HTMLInputElement)として扱うために、
TypeScript では型アサーションを用います。
const inputElement = document.querySelector("#my-input") as HTMLInputElement;
console.log(inputElement.value); // OK: HTMLInputElement 型には value プロパティがある
まとめ
ElementはDOM内のすべての要素を包括的に表す基本型で、汎用的に要素を操作できます。- 特定の要素にアクセスするには、
Elementから各要素用の具体的な型(HTMLDivElement、HTMLInputElementなど)に型アサーションを使うと、
特定のプロパティやメソッドにアクセスできるようになります。 - なんらかのDOM要素を指定して、Element型が返ってくるなら、
その指定したDOM要素を操作するプロパティーやメソッドが付いてくるので、
指定したDOM要素の操作を簡単にできる。


