16

に依存するモジュールがありますBackbone。私はbackbone.d.ts定義を持っていますが、TypeScriptは私のモジュールをコンパイルしたくないようです

import Backbone = module("backbone")

実際には、定義ファイルではなく、有効なバックボーンモジュールを指しています。AMDがロードされたモジュールを使用しており、バックボーンにrequirejsシムが定義されています。

電話のbackbone.tsモジュール定義を作成する以外に回避策はありますか?

更新:ソリューションの副作用は、モジュールが存在しなくなったため、このようなコードが機能しなくなることです。requirejsシムのために存在する必要があります。私が知っている唯一の回避策は、2つの.d.tsファイルを用意することです。declare module1つは、ビットを含まないインポートとしてバックボーンを使用するファイル用です。もう1つ/// <referenceは、declare module行を含むを使用するためのものです。

/// <reference path="../dep/backbone/backbone.d.ts" />

interface IApi {
    version: number;
    Events: Backbone.Events;
}
4

2 に答える 2

9

TypeScript言語は、この最初の回答からかなり変更されています。

たとえば、使用する外部モジュールをインポートするにはrequire(私の元の回答には古いmoduleキーワードが含まれていました):

バックボーンをインポートするための一般的なユースケースは次のとおりです-DefinitelyTypedからのタイプ情報を使用します。

/// <reference path="scripts/typings/backbone/backbone.d.ts" />

import bb = require('backbone');

タイプ定義内で、バックボーンモジュールが宣言されます。これにより、インポートが有効になります。

//... lots of code and then...

declare module "backbone" {
    export = Backbone;
}

したがって、元の質問は次を使用して解決できます...

/// <reference path="scripts/typings/backbone/backbone.d.ts" />

import bb = require('backbone');

interface IApi {
    version: number;
    Events: bb.Events;
}

class Api implements IApi {
    public version = 1;
    public Events: bb.Events = null;
}

このコード例では、これが必要なすべてですが、多くの場合、実行時にバックボーンライブラリをロードする必要があります...(公式に実験的な)amd-dependencyコメントを使用して、生成されたdefine関数呼び出しにバックボーンを含めることができます。

/// <reference path="scripts/typings/backbone/backbone.d.ts" />
/// <amd-dependency path="backbone" />

import bb = require('backbone');

interface IApi {
    version: number;
    Events: bb.Events;
}

class Api implements IApi {
    public version = 1;
    public Events: bb.Events = null;
}
于 2012-10-22T14:47:39.420 に答える
7

を処理する別の方法が実際にあります:

  1. DefinitelyTypedGithubリポジトリのクローンを作成します。これにはjquery.d.ts、、backbone.d.tsおよび他の多くの定義ファイルが含まれています。

  2. 定義ファイルをファイルにリンクしmyfile.tsます。
    /// <reference path="DefinitelyTyped/requirejs/require.d.ts" />
    /// <reference path="DefinitelyTyped/jquery/jquery.d.ts" />

  3. javascriptライブラリにamd依存関係を追加します。
    /// <amd-dependency path="jquery"/>

  4. $ファイル内で使用するには、 myfile.tsrequireを呼び出すことができます。
    var $ = require("jquery");

フルバージョンmyfile.ts

/// <reference path="DefinitelyTyped/requirejs/require.d.ts" />
/// <reference path="DefinitelyTyped/jquery/jquery.d.ts" />
/// <amd-dependency path="jquery"/>
var $ = require("jquery");

export function helloWorld() {
  $("<div>Hello World</div").appendTo(document.body);
}

実行tsc --module amd myfile.tsすると、次のjavascriptコードが得られます。

define(["require", "exports", "jquery"], function(require, exports) {
    var $ = require("jquery");

    function helloWorld() {
        $("<div>Hello World</div").appendTo(document.body);
    }
    exports.helloWorld = helloWorld;
});
于 2013-06-26T09:05:16.760 に答える