web-dev-qa-db-ja.com

TypeScriptファイルに定義ファイルなしでjsライブラリをインポートする方法

プロジェクトが大きくなるにつれて、コード管理を支援するためにJavaScriptからTypeScriptに切り替えたいと思います。ただし、多くのライブラリをAMDモジュールとして利用しているため、TypeScriptに変換することは望ましくありません。

TypeScriptファイルにインポートしたいのですが、定義ファイルを生成したくありません。どうすればそれを達成できますか?

例えば新しいTypeScriptファイル:

/// <reference path="../../../../definetelyTyped/jquery.d.ts" />
/// <reference path="../../../../definetelyTyped/require.d.ts" />
import $ = require('jquery');
import alert = require('lib/errorInfoHandler');

ここに、 lib/errorInfoHandlerは、触れたくない巨大なJavaScriptライブラリに含まれているAMDモジュールです。

上記のコードを使用すると、次のエラーが生成されます。

Unable to resolve external module ''lib/errorInfoHandler'' 
Module cannot be aliased to a non-module type.

これにより、実際に次のコードが生成されます。

define(["require", "exports", "jquery", "lib/errorInfoHandler"], function(require, exports, $, alert) {
...

}

JavaScriptライブラリをAMDモジュールとしてTypeScriptにインポートし、定義ファイルを作成せずにTypeScriptファイル内で使用する方法はありますか?

59
tune2fs

ここで与えられた2つの答えの組み合わせは私のために働いた。

//errorInfoHandler.d.ts
declare module "lib/errorInfoHandler" {
   var noTypeInfoYet: any; // any var name here really
   export = noTypeInfoYet;
}

私はまだTypeScriptに慣れていませんが、型情報のないダミー変数をエクスポートすることでTypeScriptに終了するように指示する方法に過ぎないように見えます。

編集

この回答のコメントには、単に宣言するだけで同じ結果を達成できることが記載されています。

//errorInfoHandler.d.ts
declare module "*";

Githubのコメント here をご覧ください。

24
Code Novitiate

次のコンテンツを含む独自の定義ファイルを作成します。

declare module "lib/errorInfoHandler" {}

インポートを使用する場所でこのファイルを参照します。

または、ファイルの先頭に次の行を追加します。

/// <AMD-dependency path="lib/errorInfoHandler">

注:後者がまだ機能するかどうかはわかりませんが、AMD依存関係の欠落を最初に処理した方法です。また、このアプローチでは、そのファイルに対してIntelliSenseを使用できないことに注意してください。

4
thomaux

errorInfoHandler.d.tsという名前のファイルをlibに作成します。そこに、書いてください:

var noTypeInfoYet: any; // any var name here really
export = noTypeInfoYet;

これで、alertインポートは成功し、タイプはanyになります。

1
Ryan Cavanaugh