私がTypeScriptファンではない理由

記事の翻訳を提供しますが、著者の意見は絶対に共有しません 。 しかし、この記事には、サポートを含む多くのコメントが既に集まっています。 Habréで議論したいのですが、利益はわずかです。




この1週間、TypeScriptの開発に関する私の意見について、数人の異なる人々がTwitterに興味を持っています(私は彼の恋人ではないことをよく知っています)。 私の考えを集めて、私はそれらをこの投稿の形で整理することにしました。



警告:これは私の個人的な意見であり、TypeScript開発チームを尊重します。 また、実際に使用した経験は3週間しかないことに注意してください。2つはNodejs 5.xで、もう1つはAngular 2です。



非標準



TypeScriptは、JavaScriptがどのように見えるべきであるとマイクロソフトが考えるものです。 オープン/オープンソースプロジェクトに反対するようなテクノロジーには、1つのパターンがあります。 彼らは通常失敗します。 オフハンド:Flash、Silverlight、CoffeeScript。



大規模なプロジェクトがある場合、TypeScriptを選択することは長い間一緒に過ごす必要があります。 3年後には、JavaScriptがまだここにあると確信しています。 しかし、TypeScriptについては、残念ながらそう言うことはできません。



これは遅かれ早かれ起こります...



遅かれ早かれ、JavaScriptは型のサポートを取得します。 これは避けられません。 実際、最近のJavaScript開発のスピードを考えると、型サポートが「ステージ0の提案」としてまだ発表されていないことに驚いています。 それが起こると、TypeScriptはすぐにカボチャの技術的義務に変わります。



TypeScriptは、モジュールを操作するための独自の構文を使用していたことに注意してください。 そしてES6が登場し、TypeScript開発者は誰もが新しい構文に切り替えるよう提案しています。 パターンを感じますか?



TypeScriptはかなり前から存在しているので、何ですか?



TypeScriptは2012年から利用可能です!!! その人気は完全にAngular2によるものだと思います。 個人的には、これは危険信号です。



コミュニティによって開発されていない



仕様、文法、言語の作業にコミュニティが強く関与しているとは思わない。 ES *開発では、世界中の開発者の影響がはるかに顕著です。 たぶん私はそこを探していませんが、私見、彼らは開発者に耳を傾け、JavaScriptでC#を実装する必要はありませんか?!



円形コネクタの正方形



型付けされていない言語に型を追加すること自体が課題です。 TypeScriptはJavaScriptよりも型を優先しているように感じます。 これは、ネイティブJavaScript機能を使用する場合に奇妙さをもたらします。



私はファンボーイバベルです



バベル-*****! 1年前にトランスポーターを使用するかどうかを尋ねられた場合、私はあなたをクレイジーと見なします。 Sourcemap、gulp / grunt / watch / build / etcは私にとって悪夢のように聞こえました。 そして、一度-そしてフック。



Babelはプラグインアーキテクチャを驚くほど活用しています。 「ステージ0」レベルの最も「新しい」機能を使用したいです。 はい、上記では「非標準機能」について説明しましたが、Babelが提供するものは、JavaScriptで何らかの形で間もなく表示されます。 必要なことは、検索と置換を使用して構文を修正することだけです。 さらに、実際のプロジェクトで「ステージ0」機能を使用すると、それらを実際にテストし、結果を言語開発者と共有できます。 また、さまざまなプラットフォーム(nodejs 4または5、またはブラウザー)向けにプロジェクトをコンパイルする機会に満足しています。



TypeScriptは、ES3 / ES5 / ES6のコンパイルのみをサポートします。 同時に、nodejs 5.xはES6を部分的にしかサポートしていないため、TypeScriptを使用すると、理解できない「中間状態」に陥ります。 また、ES5でコンパイルすると、デバッグが困難なポリフィルが多数得られます。



3文字:TSD



TypeScriptでは、アプリケーションで使用されるすべてのソースファイルの定義が必要です。 論理的に聞こえますか? 彼は、コードをコンパイルするために型を知る必要があります。 しかし、TypeScriptで記述されていないライブラリを使用するとどうなりますか(そしてそのような、2番目、大多数)。 これが人気のあるライブラリである場合、TSDはおそらくそれのために書かれます。 もしそうでなければ、それを書く必要があります。 または、すべてのグローバル識別子を置き換えます。 より多くの仕事、より多くの頭痛、そしてそれについて何もできない。



何が入っていますか?



私は最新の機能を使用するのが好きです。 そのため、TypeScriptの使用を開始して、ES6でおなじみの「stage-1」および「stage-0」のことを期待していました。 私は失望しました-それらのいくつかはまだ行方不明です。 開発者は型付き言語への絞り込みに大きな問題があるため(省略記号、構造破壊など)。 ただし、デコレータなど、まだ何かがあります。 そして、それは私が常に壁を押すようにします-私が使用できるものとそうでないもの。 基本的に、TypeScriptコマンドは「ステージ3」レベルの機能のみを言語に追加します。





必要な場合にのみタイプを使用してください。



百回以上聞いたことがあると思います。 しかし、これらの人は、とにかくいくつかの型情報を追加する必要があることを教えてくれません。 そして、それは「古い」コード全体に広がるanyの大きな束になります。 これにより、TypeScriptへの移行が困難なタスクになります。



FlowTypeはどうですか?



上記の私の否定的な意見を考えると、おそらく私もFlowTypeが好きではないと思いますか? 推測しないでください。 FlowTypeの開発者はJavaScriptを最前線に置き、慎重に型を構築しているように思えます。 私にとって、この言語を使用することはより自然に感じます。 Plus-Babel用のプラグイン形式のコンパイラ。



おそらくこれはまだ非標準の拡張機能であると言うでしょうか? はい。ただし、タイプは遅かれ早かれJavaScriptに到達します。 しかし、これが起こらなくても、Babelにはstrip-flow-typesプラグインが常にあります:)



カタに先立って、芸術家セルゲイ・コルスンの作品「カシチェイはアヒルをうさぎに隠す」が使われました



All Articles