添加typescript导入可防止编译为单个js文件

时间:2014-10-24 12:24:44

标签: javascript gruntjs typescript

我使用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文件?

1 个答案:

答案 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