3

data_model他のプロジェクトで役立ついくつかのクラスを含むプロジェクト (という名前) を作成しました。gulpfile.js.ts を .js にコンパイルするだけでなく.d.ts、シンボルをエクスポートする統合ファイルを作成する完全なものを作成しました。ファイルには名前が付けられdata_model.d.ts、プロジェクトのルートになります。

my_cool_apiここで、2 番目のプロジェクトを作成します。その依存関係でdata_model
Runningの git への依存関係を定義するプロジェクトと呼びましょうnpm install。.js ファイルが私のnode_modules

すべてが美しく、カラフルです。しかし、typings フォルダー。

my_cool_api

 |—— package.json
 |—— …
 |—— app.ts 
 |—— node_modules
    |—— data_model
        |—— data_model.d.ts
        |—— index.js 
        |—— lib
            |—— my_class.js 
 |—— typings
    |—— tsd.d.ts
        |—— node
        |—— …

ここでの問題はファイルですdata_model.d.ts。そのファイルの最初の行が、存在しないtypingsフォルダーへの参照を作成するためです。見てみましょう

///<reference path=“typings/mongoose/mongoose.d.ts" />

declare module 'data_model' {
  import mongoose = require('mongoose');

  export class MyClass {
   …
  }
}

これは、現在生成している .d.ts のヘッダーです。私はtypingsフォルダーを複製しようとしました(.npmignoreによって無視されないようにします.npmのインストール中にそれをインストールします)。これにより、次のものが作成されます

 |—— package.json
 |—— …
 |—— app.ts 
 |—— node_modules
    |—— data_model
        |—— data_model.d.ts
        |—— typings <<<<<<<<<<<<<<<<<<< ADDED
            |—— tsd.d.ts
              |—— node
              |—— ...
        |—— index.js 
        |—— lib
            |—— my_class.js 
 |—— typings
    |—— tsd.d.ts
        |—— node
        |—— …

しかし、それは私に何百もの「重複したエラー」を与えるでしょう (いくつかの node.d.ts ファイルが周りにあるからだと思います)。例えば:

[16:44:33] [tsc] > /my_cool_api/typings/node/node.d.ts(1553,9): error TS2300: Duplicate identifier 'cleartext'.

現在の私の解決策は、node_modules で見つけた .d.ts ファイルを自分のtypings フォルダーにコピーし、コピーしたファイルの最初の行 (参照) を相対的なtypings フォルダーに変更することです。

これを行う方法があるはずです。(私も tsd link コマンドで試しました)
助けていただければ幸いです。

4

2 に答える 2

1

この問題を解決するために現在使用しているソリューションを共有したいと思います。以前のようにフォルダー内だけでなく、プロジェクト内の任意のファイルを検索し、型定義のグローバルな束を「複合」するためv0.10.8Visual Studio Code以降で可能です。*.d.tstypings

これらのプロジェクトがあるとしましょう:

  1. my-module(依存関係として含めたい独自のモジュール)
  2. my-project(私たちのプロジェクト)
  3. another-project
  4. ...

my-modulemy-module.d.ts宣言ファイルを定義します。無視しないでください.npmignore。依存関係としてインポートすると、npm はソースだけでなく定義ファイルもインストールします。

my-project構造は次のようになります。

 |-- package.json
 |-- src
    |-- ...  
 |-- node_modules
    |-- my-module
       |-- my-module.d.ts
       |-- lib
          |-- ..
 |-- typigns
     |-- node.d.ts
     |-- ...

Visual Studio Code はnode.d.ts(および typigns フォルダーの下のすべてのファイル) だけでなく、my-module.d.ts. モジュールの typigns フォルダーを無視する (に追加する)
ことに注意してくださいmy-module/.npmignoreおそらく、複数のnode.d.ts, express.d.ts, etc ファイルが生成されるためです。1 つはモジュールから、もう 1 つはプロジェクトからです。

この時点で、.d.tsすべてのプロジェクトでいくつか (~20) の定義ファイルを使用していることに気付いたので、次のように決定しました。

まず、すべての*.d.tsファイル (モジュールのファイルを除く) を 1 つのフォルダーにグループ化します~/workspace/typings-set。要素が繰り返されることはありません。 、 などの定義ファイルは 1 つだけnode.d.tsですexpress.d.ts
次に、すべての typescript プロジェクトがそのフォルダーへのシンボリック リンクを作成します。

$> ln -s ~/workspace/typings-set/typings typings

typigns(慣例なのでそう呼んでいます)

今、my-moduleそしてmy-projectこの構造を持っています

 my-module
 |-- package.json
 |-- src
    |-- ...  
 |-- node_modules
    |-- ...
 |-- typigns =====> ~/workspace/typings-set/typings

 my-project
 |-- package.json
 |-- src
    |-- ...  
 |-- node_modules
    |-- my-module
       |-- my-module.d.ts
       |-- lib
          |-- ..
 |-- typigns =====> ~/workspace/typings-set/typings

 typings-set
  |-- README.md
  |-- tsd.json
  |-- typigns
     |-- node.d.ts
     |-- express.d.ts
     |-- socket.io.d.ts
     |-- ...
于 2016-03-02T07:55:56.307 に答える