2017-02-27 6 views
2

私はtypescriptプロジェクトを構築していて、typecript以外のlib呼び出し 'draggabilly'を使用しています。Typescriptはサードパーティのモジュールをローカルで宣言します

私はそれを自分で宣言しようとしています。

は 'draggabilly' モジュールの宣言ファイルを見つけることができなかったことを示すだ

├── @types 
│ └── draggabilly 
│  └──index.d.ts 
├── node_modules 
├── package.json 
├── README.md 
├── src 
│ ├── index.ts 
│ └── application.ts 
└── tsconfig.json 

のsrc/application.ts

import * as Draggabilly from 'draggabilly'; 

new Draggabilly('#dragItem', { 
    // options... 
}); 

...... 

:ここ

は、ファイル構造です。 '/node_modules/draggabilly/draggabilly.js' には暗黙的に 'any'タイプがあります。

は、だから私は、ローカルの宣言ファイルを作成しよう:タイプ@/draggabilly/index.d.ts:

{ 
    "compilerOptions": { 
     ...... 
     "typeRoots": [ 
      "./node_modules/@types", 
      "./@types" 
     ] 
    } 
} 

export as namespace draggabilly; 

export = Draggabilly; 

declare class Draggabilly { 
    constructor(selector: string, options: any); 
} 

が、その後tsconfig.jsonで種類のパスを含めます

しかし、まだエラーがあります。 https://github.com/ZheFeng/test-ts-types

問題はどのようにだけではありません。だから、私はgithubの上でこの質問に対するデモリポジトリを作成し、ローカルに何ここで間違っているとどのようなサードパーティのモジュール宣言ファイルを構築するための正しい方法だ

知りたいです.d.tsファイルの中で定義しますが、typescriptは宣言ファイルを全く見つけることができませんでした。

+0

チェックアウトこのdraggabillyタイピングhttps://github.com/giespaepen/draggabilly/blob/f40f08319eb2f8c8305a6207cf9afb731232dbfe/typings/draggabilly.d.ts –

+0

おかげAivan、私でした。しかし、typescriptは私の宣言ファイルを認識していないようです。だから私は上記の私のファイル構造と設定を入れている。 – Zhe

答えて

2

問題はラインexport = Draggabilly;である - あなたはそれをインポートするには、活字体固有の構文import let = require("module")を使用する必要があります。TypeScript documentationから

輸出=を使用してモジュールをインポートする場合、活字体モジュールをインポートするには、固有のimport let = require("module")を使用する必要があります。

だからあなたのインポートは次のようになります。

import Draggabilly = require("draggabilly");


あなたはES6スタイルのインポートを使用する場合は、以下のようなあなたの index.d.tsを変更することができます。

export as namespace draggabilly; 

export class Draggabilly { 
    constructor(selector: string, options: any); 
} 

...とインポートをこのように:

import * as draggabilly from 'draggabilly'; 

new draggabilly.Draggabilly('#dragItem', { 
    // options... 
}); 
+0

はい、あなたは正しいです。しかし、問題は私がエクスポートクラスDraggabillyに変更されても、エラーはまだ "モジュールの宣言ファイルを見つけることができませんでした" draggabilly '/node_modules/draggabilly/draggabilly.js'暗黙のうちに '任意の'型があります。それはtypescriptが私のローカル宣言ファイルを無視するようです – Zhe

+0

あなたはあなたが持っている正確なコードであなたのポストを更新することはできますか?私はエラーを再現するように見えません。 – Saravana

+0

サラバナのおかげでありがとう。私はgithubに関するこの質問のデモリポジトリを作成しました:https://github.com/ZheFeng/test-ts-types – Zhe

0

Wh非活字基づいてサードパーティのモジュールの宣言ファイルを提供する途中、宣言モジュールは、グローバルスコープ、および宣言モジュール外なし輸入または輸出でなければなりません。

// @types/draggabilly/index.d.ts 
declare module "draggabilly" { 
    class Draggabilly { 
     constructor(selector: string, options: any); 
    } 

    export = Draggabilly; 
} 

// src/application.ts 
import Draggabilly = require("draggabilly"); 

new Draggabilly("#dragItem", { 
    // options... 
}); 
関連する問題