我使用grunt-typescript从一组ts文件生成单个js文件。这可以正常工作,直到我将一个import语句添加到其中一个ts文件。
示例grunt-typescript config
typescript: {
server: {
src: ["./ts/file1.ts", "./ts/file2.ts"],
dest: "./js/out.js",
options: {
module: 'amd', //or commonjs
target: 'es5', //or es3
basePath: '',
sourcemap: false,
declaration: false,
ignoreError: false
}
}
}
如果我将import语句添加到file2.ts的顶部,例如
import PG = require("pg");
然后我得到错误,File1.ts中的代码无法找到File2.ts中定义的类型,并且我在/ ts目录中生成了一个意外的File2.js,忽略了dest文件参数。导入似乎导致它完全单独编译File2.ts。
这是通过导入预期的,或者如何解决这个问题以创建没有编译错误的预期单个js文件?
答案 0 :(得分:2)
只要导入AMD模块,或从任何内部模块外部导出,您的文件就会被编译为AMD模块。 AMD和单文件编译本质上是不同的工作模式,不喜欢混合使用。要阅读内部和外部模块,请查看this TypeScript wiki page。
您在技术上仍然可以使用标准JavaScript方法导入AMD模块,但这很尴尬。例如,使用DefinitelyTyped中的require.d.ts文件:
/// <reference path="require.d.ts"/>
require(["somemodule"], (SomeModule: namespace.SomeModule) => {
// async code called after the module is retrieved
});
没有import
关键字,TypeScript不会对需求做任何事情,而是让您自己离开。
或者我会建议全面使用AMD。如果您的任何库是AMD,那么它更容易使用,并且您可以在发布时compile down to a single file。