在Typescript AMD模块中自动包含AMD deps?

7za*_*rk7 8 requirejs typescript

有没有办法导入或注释Typescript模块,以便在生成与AMD兼容的模块时,外部AMD模块将自动作为依赖项包含在内?:

tsc --module AMD example.ts
Run Code Online (Sandbox Code Playgroud)

我试图包括引用*.d.ts文件和导出声明语句:

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

export declare var $;
export declare var _;

export module example {
    export class Example {
        // whatever
    }
}
Run Code Online (Sandbox Code Playgroud)

但是生成的模块不包括以下内容:

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;
})
Run Code Online (Sandbox Code Playgroud)

真的想避免在这里创建"假"模块.

这似乎是一个很好的解决方案,用法是允许直接导入AMD模块:

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

但我不知道那是多么可行.

编辑:

我还尝试了这里提到的这种方法:仅使用环境定义导入TypeScript模块以在amd中使用

import knockout = module("./lib/knockout-2.2.d.ts");
...
Run Code Online (Sandbox Code Playgroud)

但得到这些编译器错误:

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
Run Code Online (Sandbox Code Playgroud)

Fen*_*ton 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');
}
Run Code Online (Sandbox Code Playgroud)

生成的 JavaScript 代码:

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

昏死

有些人在淘汰赛中遇到了麻烦...同样的技术也适用于淘汰赛...

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

import ko = require('knockout');

export module foo {
    var obs = ko.observable('example');
}
Run Code Online (Sandbox Code Playgroud)

生成的 JavaScript 代码:

define(["require", "exports", 'knockout'], function(require, exports, ko) {
    (function (foo) {
        var n = ko.observable('example');
    })(exports.foo || (exports.foo = {}));
    var foo = exports.foo;
});
Run Code Online (Sandbox Code Playgroud)