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