我正在使用grunt-typescript从一组ts文件生成单个js文件。在我将导入语句添加到ts文件之一之前,该方法工作正常。

示例grunt-typescript配置

    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
            }
        }
    }


如果我在file2.ts的顶部添加导入语句,例如

import PG = require("pg");


然后,我收到错误消息,指出File1.ts中的代码找不到File2.ts中定义的类型,并且在/ ts目录中生成了意外的File2.js,忽略了dest file参数。导入似乎导致它完全单独编译File2.ts。

这是导入所期望的还是我如何解决此问题以创建期望的单个js文件而没有编译错误?

最佳答案

导入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

09-30 16:24
查看更多