从仅包含 "declare module" 顶级声明的 TypeScripd 声明文件中导入内容

Import stuff from TypeScripd declaration file with only "declare module" top level declarations

我有一个 TypeScript 文件 foo.d.ts。它包含很多 "declare module" 构造,仅此而已:

declare module Foo {
}

declare module Fun {
}

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

如果文件在另一个 import * as bridge from "./foo"; 中被引用,tsc 会说 "File foo.d.ts is not a module"。我做错了什么?

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

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

通用规则非常简单,如果至少有一个包含 export[=22= 的顶级实体 (class/interface/variable ..),TypeScript 编译器会将文件视为一个模块]修饰符。否则,文件将像脚本一样被处理。

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

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