Typescript中没有导入语句的外部模块

Typescript中没有导入语句的外部模块,typescript,module,Typescript,Module,将import语句添加到Typescript文件时,此文件被视为外部模块。所以这不是问题: 文件.1.ts import { Type } from '...'; let whatever = 123; ... import { Type } from '...'; let whatever = 234; ... 文件.2.ts import { Type } from '...'; let whatever = 123; ... import { Type } from '...'; l

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

文件.1.ts

import { Type } from '...';
let whatever = 123;
...
import { Type } from '...';
let whatever = 234;
...
文件.2.ts

import { Type } from '...';
let whatever = 123;
...
import { Type } from '...';
let whatever = 234;
...
所以这是可行的。但是,一旦删除这两个
import
语句,这些文件就不再被视为模块,具有相同名称的两个变量就成为相互干扰的全局变量

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

需要
导入
导出
某些内容。我建议导出未定义的
值:

export let undefined;

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

请注意,它非常有黑客味,但是

鉴于: 它不是一个模块,
不导出任何内容
也不输出任何内容,
并且不能修改
您不能将其包括在项目中,否则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);
或者在浏览器中,捆绑此类代码

并且在运行时创建一个脚本元素并加载它?

您可以
导出
一些东西吗?来源:在TypeScript中,就像在ECMAScript 2015中一样,任何包含顶级
导入
导出
的文件都被视为一个模块。@Paleo:没有任何东西可以导入或导出。它使用静态内联配置对象定义角度路由。@lenny:没错,但我不是问它何时被视为模块,而是问如果我没有任何东西要导入或导出,如何将其作为模块?定义一个模块?名称空间?除了导出变量外,没有其他方法:
export const whatever=234我没说它不是一个模块。我所有的文件都是模块,因为它们可以导入和/或导出内容。这一个应该是一个模块FWIW,只是它不导入和/或导出任何东西,所以TSC不认为它是这样的。是的,我知道了…但是。。。“只是它不导入和/或导出任何东西”,所以。。。它不是一个模块:),在任何情况下,我认为最好的选择是以ts的方式进行,并且,正如Paleo所建议的,导入/导出一些东西我发现我还可以做一个简单的
import'不会引发异常,也不会导入任何内容。但满足导入要求。简单的
导入如何?@RobertKoritnik我认为导入一个不存在的模块是无效的。即使编译器没有抱怨,它也会为导入创建一个变量。它不干净。