8

AMD互換モジュールを生成するときに外部AMDモジュールが依存関係として自動的に含まれるようにTypescriptモジュールをインポートまたは注釈を付ける方法はありますか?:

tsc --module AMD example.ts

参照*.d.tsファイルを含めることと、declareステートメントをエクスポートすることの両方を含めようとしました。

///<reference path='./lib/knockout-2.2.d.ts' />

export declare var $;
export declare var _;

export module example {
    export class Example {
        // whatever
    }
}

ただし、生成されたモジュールには次のものは含まれていません。

define(["require", "exports"], function(require, exports) {
    (function (example) {
        var Example = (function () {
            function Example() { }
            return Example;
        })();
        example.Example = Example;        
    })(exports.example || (exports.example = {}));
    var example = exports.example;
})

ここで「偽の」モジュールを作成することは本当に避けたいと思います。

良い解決策と使用法は、AMDモジュールを直接インポートできるようにすることだと思われます。

var $ = import('jquery'); // This is a requirejs/AMD module, not a typescript file.

しかし、それがどれほど実現可能かはわかりません。

編集:

そして、私はここで言及されているこのアプローチも試しました:amdで使用するためにアンビエント定義のみを使用してTypeScriptモジュールをインポートします

import knockout = module("./lib/knockout-2.2.d.ts");
...

しかし、これらのコンパイラエラーが発生します。

example.ts(1,32): The name '"./lib/knockout-2.2.d.ts"' does not exist in the current scope
example.ts(1,32): A module cannot be aliased to a non-module type
4

3 に答える 3

4

これ:

declare module 'jquery' { export var n; };

import $ = module('jquery');

export module foo {
    var n = $.n;
}

適切なdefine呼び出しになります:

define(["require", "exports", 'jquery'], ...

$インポートされた値 (この例では) をの位置 (型の位置のみではなく) で使用しない場合、コンパイラはその依存関係を最適化することに注意してください。

于 2012-12-12T17:52:20.157 に答える
3

TypeScriptのより最近のバージョンでは、これを行う正しい方法は...

例(たまたまjQuery)

ステップ 1: NuGet から定義ファイルをダウンロードします (つまり、jquery.typescript)

ステップ 2: コードは次のとおりです (Visual Studio では参照コメントは必要ありません)。

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

import $ = require('jquery');

export module foo {
    var elem = $('#myid');
}

結果の JavaScript:

define(["require", "exports", 'jquery'], function(require, exports, $) {
    (function (foo) {
        var elem = $('#myid');
    })(exports.foo || (exports.foo = {}));
    var foo = exports.foo;
});

ノックアウト

一部の人々はノックアウトで問題を抱えていました...同じテクニックがノックアウトにも機能します...

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

import ko = require('knockout');

export module foo {
    var obs = ko.observable('example');
}

結果の JavaScript:

define(["require", "exports", 'knockout'], function(require, exports, ko) {
    (function (foo) {
        var n = ko.observable('example');
    })(exports.foo || (exports.foo = {}));
    var foo = exports.foo;
});
于 2015-01-06T15:16:46.730 に答える
0

ライアンの答えは、新しい宣言がトリプルコメントされた「.d.ts」ファイルで参照されている型を非表示にすることを除いて機能しました。

これを克服するには、宣言を次のように変更してみてください。

declare module 'knockout' { export = knockout; }

私はノックアウトでテストしませんでしたが、ソリューションはそれでも機能するはずです。

于 2013-07-30T10:45:58.903 に答える