具体想象一下这个场景:我有一个jquery插件$ .mega()。
我可以为这个插件创建一个定义文件,如下所示:
/// <reference path="../jquery/jquery.d.ts"/>
// Extend jquery with .mega()
interface JQuery { mega(options?:any):void; }
// Declare an external module, to import mega using AMD.
// NB. You still need to setup require.js to find the bower module.
declare module mega { export function dummy():void; }
declare module "mega" { export = mega; }
然后我可以使用以下命令从脚本调用插件:
/// <reference path="../../defs/jquery/jquery.d.ts"/>
/// <reference path="../../defs/mega/mega.d.ts"/>
import mega = require('mega');
import $ = require('jquery');
((...r:any[]) => {})(mega); // <---- WTF!
$('.target').mega();
由于打字稿会自动修剪并丢弃未使用的依赖关系作为优化步骤,而不实际使用模块,该模块将被丢弃,因此我不得不使用以下方式“伪造”模块的使用: / p>
((...r:any[]) => {})(mega);
如果没有这个,编译的javascript看起来像:
define(["require", "exports", 'jquery'], function(require, exports, $) {
//((...r:any[]) => {})(mega);
$('.target').mega();
});
那么,有什么方法可以确保在打字稿编译时不需要'优化'吗?
编译标志或构建定义文件的特殊方式对我来说都可以正常工作〜
的Nb。这更适用于AMD,但它适用于commonjs模块。
答案 0 :(得分:4)
您可以使用amd-dependency
指定您希望在amd define调用中提升的内容,例如:
/// <amd-dependency path="mega" />
答案 1 :(得分:1)
更好的解决方案(使用TS 1.8测试):
import 'mega';
amd-dependency triple-slash-directive似乎只有在有其他需要导入时才有效;只有amd-dependency指令才会导致TypeScript编译器在没有模块定义的情况下完全生成JavaScript。