我有一个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 {}
),问题就会消失。
答案 0 :(得分:3)
您遇到错误的原因是您的 foo.d.ts 实际上不是一个模块,而是一个脚本。但 import 语句应该仅与模块一起使用。当您添加export interface Fix {}
时,这会将文件转换为模块,这就是错误消失的原因。
通用规则非常简单,如果至少有一个包含 export 修饰符的顶级实体(类/接口/变量..),TypeScript编译器会将文件视为模块。否则,文件将像脚本一样处理。
如果您真的不需要 foo.d.ts 作为模块,可以使用下面的指令来引用它。在这种情况下,文件中声明的所有实体都将全局可用。
/// <reference path="foo.d.ts" />