🤷

TypeScriptは補助輪(Training wheels)論-3年前から同じ

2021/10/21に公開

@asama さんの記事
https://zenn.dev/asama/articles/0c66573e488b22

Twitterやはてブなどを読みましたが、捉え方が様々ですね。
とくに「補助輪」という表現が見過ごせない方が多いようで、気になりました。

Denoが脱TypeScriptをしてJavaScriptに戻した話

どうやらDenoの話を知らない人が多いようです(Denoは、Node.jsの製作者であるRyan Dahlによって作られた新しいランタイムです。簡単に説明するなら、Node.jsのイケてないところを改良したものがDenoです。Denoの文字を並べ替えるとNodeになります)

DenoはTypeScriptを使用していましたが、
純粋な(バニラな)JavaScriptに戻す道を選びました。

理由はこちらで語られています。

5 reasons why Deno will stop using TypeScript
(DenoがTypeScriptの使用をやめる5つの理由)
https://startfunction.com/deno-will-stop-using-typescript/
https://docs.google.com/document/d/1_WvwHl7BXUPmoiSeD8G83JmS8ypsTPqed4Btkqkn_-4/preview?pru=AAABcrrKL5k*nQ4LS569NsRRAce2BVanXw#

日本語翻訳記事(有志)
https://qiita.com/Syoitu/items/244c6bf99a6b7bf5ab9c

最初に言いたいことは「すべてのJavaScriptエンジニアが『つよつよ』ではない」ということ

以上を踏まえた上で、TypeScriptは補助輪であるということ

前提を忘れてはいけません。
偉人と凡人を、同等に扱ってはいけないのです(残念ですが)。

https://youtu.be/iXh9nfwxzyE
(かっこいい補助輪もあります)

JavaScriptで1,000,000行?天才しか書けない

JavaScriptは「Brendan Eich(ブレンダン・アイク)」によって、約10日で開発されました。

JavaScriptでどのようなコードを書こうとしたか?
おそらく100行、多くても1,000行程度の簡単なスクリプトを対象としていたと思います。
しかし、現在では1,000,000行のJavaScriptコードが、天才の手によって生まれています。
一般的な感覚ですと狂気の沙汰です。

私たちのような凡人はどうしましょう?さあ、困りましたね。

そのため、「つよつよ」でなくても彼らと同等の力を持てる道具が開発されました。

それがTypeScriptです!

TypeScriptはJavaScriptの補助輪のようなもの。
つよつよなエンジニアがそのように思っていることは事実です。

でも、良いじゃありませんか?

怒るところではありません。むしろ感謝すべきことです。
今では私も賛成しています。

(この議論は定期的に何度も起こるんですよね。忘れた頃にいつも・・・)

補助輪は悪いことではありません。

正直な話、バニラなJavaScriptですと、エラーの予測が非常に困難ですよね?
補助輪は私たちに自信安全を提供してくれます。
補助輪はコードを書いているときだけに存在し、トランスパイル後は補助輪が削除されます(恥はかきません)。

TypeScriptが嫌いな天才たち

先日、尊敬しているフロントエンドエンジニアの勉強会に参加しました。
彼はTypeScriptをとても嫌っていました(笑)。
私はその口論に参加してしまったので、ブロックされないかヒヤヒヤしています。

彼はJavaScriptのことをよく知っています。

私もJavaScriptのことを知っています。
しかし、JavaScriptのことを「100%」知っているかと聞かれたら「NO」です。
10年以上もJavaScriptを書いていますが、まだまだ学ぶ必要があります。

だから、私は現在では、ほぼ毎日「TypeScript」を書いています。

TypeScriptはJavaScriptのスーパーセット

すべてのJavaScriptコードは、TypeScriptでも有効です。
TypeScriptを使用すると、開発者はECMAScript標準の最新バージョンでプログラミングできます。(ES3まで遡ってターゲットを設定することもできます←あなたは自分の記憶だけでできますか?)

トランスパイル時に、コードは純粋なJavaScriptになり、すべての型表記が削除されます。

拡張子はわかりづらい

.tsファイルは動画データを記録するファイル形式の一つで、MPEG-2トランスポートストリーム(MPEG2 TS)形式のデータをそのままファイルに記録したものですよね?
デジタル地上波の拡張子など。

.tsxはなんですか?

当時はそう思いました。
(.tsファイルは別の拡張子にすべきであったと今でも思っています)

TypeScriptのコードはとてもクリーン

たとえば enum のコードを見てみましょう。
とてもクリーンではないですか?

TypeScript

export enum DayOfWeek {
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
}

これを、JavaScriptで書いた場合(トランスパイルした後)を見てみましょう。

var DayOfWeek;
(function (DayOfWeek) {
    DayOfWeek[DayOfWeek["Sunday"] = 0] = "Sunday";
    DayOfWeek[DayOfWeek["Monday"] = 1] = "Monday";
    DayOfWeek[DayOfWeek["Tuesday"] = 2] = "Tuesday";
    DayOfWeek[DayOfWeek["Wednesday"] = 3] = "Wednesday";
    DayOfWeek[DayOfWeek["Thursday"] = 4] = "Thursday";
    DayOfWeek[DayOfWeek["Friday"] = 5] = "Friday";
    DayOfWeek[DayOfWeek["Saturday"] = 6] = "Saturday";
})(DayOfWeek || (DayOfWeek = {}));

かなり単純なコードですが、ぐおお・・・。私のような凡人には無理ですね。
(これは本質的に逆マップであり、プロパティはインデックスから割り当てられます)

結論

あなたが天才であればこの補助輪は邪魔でしょう。外してください。
しかし、天才でなければ、この補助輪を使用しない理由はないでしょう。

Discussion