2017-09-14 24 views
0

私は、/typings/tsd.jsonの.dファイルを扱う方法を使用し、Typescriptのmoduleキーワードを使ってjavascriptにコンパイルする古いtypescriptプロジェクトを持っていますIIFEモジュールパターン。 tsconfig.json(commonjs/amd/etc。)のモジュール設定は、そのキーワードによって無視されます。デモのために周囲と非周囲のタイスクリプト定義ファイルを合成する方法

、私は//node_modules/@種類に.d.tsファイルで、このプロジェクトにSystemJSモジュールローダーでimportexportキーワードのより一般的な方法を使用していくつかの新しいtypescriptですコードを追加しています。

いくつかのGulp/SystemJS体操の後、それはすべて実行時に一緒に動作し、私は締め切りを迎えています。しかし、私は解決したい一つのシナリオでコンパイル時に問題を抱えています。

新しいコードからクラス(モデル)を使用するように古いコードを変更すると、古いコードで新しいコードの.d.tsについて知りたいと思います。そこで、古いコードのファイル/// <reference path="../../newercode/feature4/models/NewerModels.d.ts"/>の先頭に追加しました。 (代わりに、同じ行をtsd.d.tsに入れますが、同じ結果が得られます)

コンパイラは私の古いコードに「NewModel」というプライベートネームを持っている、または使用しています。

importexportの中にキーワードがありますが、すでに/ typings /にある.d.tsファイルは存在しません。これらのキーワードは、誤ったコンパイラエラーの原因です。

レガシープロジェクトでは周囲の.d.tsファイルが必要です。新しいコードでは非周囲環境が生成されます。

私はそれについて何かできることはありますか?

+0

'tsd'を使い続ける代わりに' @ types'を使うように移行することをお勧めします。あなたはワンショットでそれを行うことができるはずです。 – unional

+0

パッケージのために入手した.d.tsファイルは、どこから取得するかによって異なります。私がそれをした場合、すべての.d.tsファイルにインポート/エクスポートキーワードがあるので、レガシーコードはまったくコンパイルされません。 –

+0

'@ types'から入手した新しいファイルは、同じ構文を持つ必要があります。オリジナルのライブラリはまだ同じCommonJSライブラリです(変更しない限り、バージョニングに対処する必要があります)。 'tsd'はファイルをDefinitelyTypedから取得し、' @ types'と同じものを取得します。 TSチームは合理的な仕事をしてフォーマットを変換しました。それが動作するかどうかを試してみてください。 – unional

答えて

0

私の現在の解決策は理想的ではありませんが、デモの目的には適しています。

私は、/タイピング/の下に新しいフォルダを作成するには、/特長4/と呼ばれ、そこに関連する.d.tsファイルをコピーします。それらを編集してexportキーワードを削除し、必要に応じてimportキーワードを削除し、classキーワードをinterfaceに変更して、パッチされた古いコードが生のnew NewerModel()コールを試みないようにします。

新しいクラスが実際にグローバル名前空間に存在しないため、最後のビットは明らかに機能しませんでした。classからinterfaceへの変更はこれを阻止するのに役立ちます。私は主にモデルをつかんでいるので、インターフェイスにはnew NewerModel()と書かれている以外の機能は失われていますが、私はとにかく私が望んだものの95%のモデルのプロパティをコンパイル時にチェックしています。

同じように扱われるいくつかのサービスもありますが、それらのメソッドを呼び出すメソッドは依然依存性注入のために機能します。サービスはグローバルネームスペースから呼び出されることはありませんでした。

誰かが/newercode/feature4/models/NewerModels.tsを変更しますが、1)今と期限の間に任意のがあってはならない、と2)それは本当に問題だ場合と、このソリューションは、明らかに問題がありますGulpタスクを作成して、各ビルドの.d.tsファイルのコピーと編集を自動化することができました。

関連する問題