2016-04-23 7 views
4

最近誰もがタイコを強制しています。それについては非常に多くのファンと記事があります。 AngularチームはTSでそのフレームワークを作っています。 しかし、ES6をTSに移行した私の経験は非常に残念でした。typescriptは十分に堅牢ですか?

私は比較的新しいコードベース(ES6で書かれている)を先月Typescriptに移行しようとしましたが、1トンの落とし穴に直面しました!

明らかに、私たちはmochaユニットテストでnode.jsアプリケーションを、ESLintは(バベルとトランジライルを使用して)構成されていることを話しています。

まず、noImplicitAnyオプションを設定すると、 に数百のエラーがあり、それを修正しました。しかし、その後、typescriptがstreamのようないくつかのnode.jsの定義済みモジュールを理解できないためにタイプミスが発生しました(多くのモジュールではタイピングが不足しているため実際には問題が大きくなりました)。

はその後、私はtypingsインストール - ライブラリd.tsファイルを管理するためのtsdツールの交換をお勧めしますが、それはstream問題を解決しながら、それはいくつかの定義済みの型と重複するので、エラーの多くを追加、nodeタイピングの定義です。

さらに、typescriptは実際にはES6の多くの機能を実際にES5にコンパイルしていないことがわかりました。 それは私に複雑なビルドプロセス(TS - >(typescript)ES6 - >(バベル)ES5)を強いることになり、元のソースマップを無駄にしなければならないということです。

上記のすべての設定には多くの時間がかかりました。

私は混乱しています。私は実際にtypescriptの背後にあるアイディアが大好きですが、実装は私にとってとても失礼なようです。私は間違っていると思う。

実際のプロジェクトでTypescriptを使用した人は、HelloWorldではなく、私が何を間違えているのか説明できますか?

答えて

5

私はあなたが非常に高い期待を持っているnoImplicitAnyオプション

を設定します。 ES6からプロジェクトを移行する際には、このオプションを使用しないでください。

typescriptがのような一部のnode.js定義済みモジュールを理解できないために入力エラーが発生しました。

型定義を持たないJSライブラリは苦痛です。しかし暗黙のタイプanyはあなたを救います。

その後、いくつかの定義済みのタイプが重複しているため、多くのエラーが追加されました。

tsconfig.jsonからブラウザのディレクトリとbrowser.d.tsを除外します。

さらに、私は、typescriptがES6からES5の多くの機能を実際にはジェネレータなどにコンパイルしないことを発見しました。それは私に複雑なビルドプロセス(TS - >(typescript)ES6 - >(babel)ES5)を強制させ、元のソースマップを無駄にしなければならないということです。

これは、TSは本当に堅牢に設計上の選択です:コンパイルされたコードは、任意のランタイムライブラリを必要としません。

しかし、なぜ生成されたES6コードでBabelを使用していますか? Node.js 4または5では、ES6コードが正常に動作します。

十分な堅牢性を備えていますか?

JavaScript VMと同じくらいです。 TS 1.7以降のターゲットのNode.js

ES6

活字体、オプション--moduleがターゲットes6に関連して使用することができます。 tsconfig.jsonでの例、:

"compilerOptions": { 
    "module": "commonjs", 
    "target": "es6", 
} 

NB:TS 1.8、modules are emitted with a "use strict"; prologue以来。

+0

ご回答ありがとうございます、@パレオ! 私は 'noImplicitAny'について大きな期待はありませんでした。タイプ定義でES6コードをリファクタリングするために一時的に設定しました。だから、全く問題ではありません。 ノードv4-5について - ES6の実行を許可しますが、 'let'キーワードなどには' strict mode'を必要とするなどの制限があります。また、純粋なNode.jsでES6モジュールを使用することもできません。 何か不足していますか? –

+2

ノード5には、厳格を要求しないようにするフラグがあります。これらは、ノード5がTypescript '--use_strict --harmony --harmony_default_parameters --harmony_destructuring'で正しく動作するために使用するフラグです。ノード6をリリースしようとすると、その多くがデフォルトになります。 – ArcSine

+0

@ Elessar.perm、TS 1.7以降では、 '--module'オプションをターゲット' es6'に関連付けることができます。 – Paleo

関連する問題