SEOに強いTypeScript入門記事がミスリードを招いていて絶望しかけた記事読んだ
SEOに強いTypeScript入門記事がミスリードを招いていて絶望しかけた - Qiita
ちょっと話題になってるこれ読んだ。もちろん間違っていることが書いてあるんだけど、何がどう間違っているのかをいきなり問われたら正確に説明できるか?という自信はないので頭に入れておきたい。
まずTypeScriptならクラスが書けるというやつは、JavaScriptもクラス構文があるのは知っていたので大丈夫、だと思う。
まあクラス構文はほとんど使っていないけれど。
次のTypeScriptはクラスベースというのは、ん?と思ったけどじゃあ何がどう違うのか?というのが記事を読むまで具体的に説明できなかった。
記事にもあるように、JavaScriptにはクラスがなくTypeScriptにはクラスがあるという誤解が前提のようだが、JavaScriptはプロトタイプベースでTypeScriptはクラスベースであるというもの。
実際にはTypeScriptがクラスベースの言語ではなく、JavaScriptと同じくプロトタイプベース。
そもそもプロトタイプベースって何?というところから自分は認識が甘かったので、参考記事を読んでおいた。
プロトタイプベース | TypeScript入門『サバイバルTypeScript』
クラスベースは、クラスをもとに新しいオブジェクトを生成するスタイル。JavaやPHPなどが該当。
プロトタイプベースは、既存のオブジェクトから新しいオブジェクトを生成するスタイル。JavaScriptが該当。
シンプルに解釈すると↑のようになる。クラスという雛形からオブジェクトを生成するのがクラスベースで、オブジェクトからオブジェクトを生成するのがプロトタイプベース。
ブレンダン・アイク氏のインタビューの話も載っており学びが増えた。
TypeScriptのほうが動作が早い、については、???となった。
TypeScriptはJavaScriptにコンパイルして実行でき、TypeScript自体を実行できる環境なんてあるの……?と思ったら、実際そうだったらしい。
TypeScriptからJavaScriptへの変換処理は、基本的に型注釈(や型に関する構文)を取り除くだけなので、JavaScript生成時に速度最適化のためのドラスティックな書き換えやチューニングもありません。
これもしっくりくる。
モジュールについては、ESMの観点だと記事通りだけど、
「TypeScript にモジュールがありJavaScriptにはない」の誤解、たぶん ESM じゃなくて module x {} 構文を指してると思う
— mizchi (@mizchi) May 27, 2022
これの可能性もあるらしい。
あと「Denoには実行環境にTypeScriptが入っている」みたいなコメントがあったが、そんなことはないよというコメントがついていた。これも勉強になった。