Requirejs 是否在Typescript AMD模块中自动包含AMD DEP?

Requirejs 是否在Typescript AMD模块中自动包含AMD DEP?,requirejs,typescript,Requirejs,Typescript,是否有方法导入或注释Typescript模块,以便在生成AMD兼容模块时,外部AMD模块将自动包含为依赖项 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 cla

是否有方法导入或注释Typescript模块,以便在生成AMD兼容模块时,外部AMD模块将自动包含为依赖项

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
    }
}
我真的想避免在这里创建“假”模块

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

var $ = import('jquery'); // This is a requirejs/AMD module, not a typescript file.
但我不知道这有多可行

编辑:

我也尝试过这里提到的方法:

但要获得以下编译器错误:

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
这:

将导致正确的
define
调用:

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

请注意,如果在值位置(而不是仅在类型位置)不使用导入的值(
$
,在本例中),编译器将优化该依赖关系。

Ryan的回答有效,但新的声明隐藏了三重注释的“.d.ts”文件中引用的类型

要克服此问题,您可能希望尝试更改声明,如下所示:

declare module 'knockout' { export = knockout; }

我没有使用knockout进行测试,但解决方案也应该使用knockout。

在TypeScript的最新版本中,正确的方法是

示例(恰好是jQuery) 步骤1:从NuGet下载定义文件(即jquery.typescript)

步骤2:以下是代码(Visual Studio中不需要引用注释):

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

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

import ko = require('knockout');

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

谢谢Ryan,我会试一试的。虽然我知道JS模块空间与CommonJS、AMD等有点混乱,但这不是TypeScript的错——如果没有这些解决方法,在TS中轻松包含外部模块似乎很有价值。当import ko=module('knockout')时,ko不能用作ko.observable(),您找到了一个很好的解决方案吗?没有-在我的情况下,我开始意识到将我的Typescript应用程序集中到一个文件(
tsc--out
)比担心AMD更容易,因为我没有懒洋洋地加载任何东西。我只是找到了//,但我回家后可以先测试它。我不知道这一点,谢谢,但我还不能100%地解决它,它会给依赖项添加敲除,但不会给函数参数添加敲除。
define(["require", "exports", 'jquery'], ...
declare module 'knockout' { export = knockout; }
/// <reference path="scripts/typings/jquery/jquery.d.ts" />

import $ = require('jquery');

export module foo {
    var elem = $('#myid');
}
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');
}
define(["require", "exports", 'knockout'], function(require, exports, ko) {
    (function (foo) {
        var n = ko.observable('example');
    })(exports.foo || (exports.foo = {}));
    var foo = exports.foo;
});