在Typescript中没有import语句的外部模块

时间:2016-12-23 09:50:31

标签: typescript module

当您向Typescript文件添加import语句时,此文件被视为外部模块。所以这不是问题:

File.1.ts

import { Type } from '...';
let whatever = 123;
...

File.2.ts

import { Type } from '...';
let whatever = 234;
...

所以这很有效。但是,在删除这两个import语句的那一刻,这些文件不再被视为模块,并且具有相同名称的两个变量都会全局干扰彼此。

问题

如何强制对没有任何导入语句的源文件进行模块化?

2 个答案:

答案 0 :(得分:2)

需要importexport。我建议导出undefined值:

export let undefined;

编译器不会为此指令生成任何代码。

答案 1 :(得分:0)

要注意它非常 hacky 但是......

下式给出:

它不是一个模块,
 不出口任何东西
 也没有出口,
 并且无法修改
 你不能把它包含在项目中,或者tsc会抱怨重复

所以...你不能设置它的状态
 或..通过参数
 并且......你无法阅读它的输出/结果

那么......你想要它,因为它的副作用?

// file: notamoduleA.ts:
let x = "x";
(global as any).x = x;

// file: notamoduleB.ts:
let x = "y";
(global as any).x = x;

让它成为一个模块?

// file: index.ts:

import * as ts from "typescript";
import * as fs from "fs";

eval(
    ts.transpileModule(
        fs.readFileSync(
            "./external/notamoduleA.ts", "utf8")+
             "\n export = {name: 'A'}",{
                 // options ...
             }             
    ).outputText
);

console.log((global as any).x);

eval(
    ts.transpileModule(
        fs.readFileSync(
            "./external/notamoduleB.ts", "utf8")+
             "\n export = {name: 'B'}",{
                 // options ...
             }             
    ).outputText
);

console.log((global as any).x);

或在浏览器中捆绑那种代码
 并在运行时创建一个脚本元素并加载它?