仅使用"声明模块"从TypeScripd声明文件导入内容。顶级声明

时间:2017-04-27 09:55:27

标签: typescript module bridge.net

我有一个TypeScript文件foo.d.ts.它包含很多"声明模块"构造而已,仅此而已:

declare module Foo {
}

declare module Fun {
}

代码是由Bridge.NET自动生成的,所以我无法对其进行修改(实际上我可以。但它不是一个好看的解决方案)。

如果文件在import * as bridge from "./foo";的另一个文件中被引用,则tsc表示"文件foo.d.ts不是模块"。我做错了什么?

如果我编辑生成的文件(foo.d.ts)并在其末尾添加虚拟顶级导出(export interface Fix {}),问题就会消失。

1 个答案:

答案 0 :(得分:3)

您遇到错误的原因是您的 foo.d.ts 实际上不是一个模块,而是一个脚本。但 import 语句应该仅与模块一起使用。当您添加export interface Fix {}时,这会将文件转换为模块,这就是错误消失的原因。

通用规则非常简单,如果至少有一个包含 export 修饰符的顶级实体(类/接口/变量..),TypeScript编译器会将文件视为模块。否则,文件将像脚本一样处理。

如果您真的不需要 foo.d.ts 作为模块,可以使用下面的指令来引用它。在这种情况下,文件中声明的所有实体都将全局可用。

/// <reference path="foo.d.ts" />