2017-04-27 96 views
1

我有一个TypeScript文件foo.d.ts.它包含了很多的“申报模块”结构,仅此而已:只从“声明模块”顶级声明中导入TypeScripd声明文件的内容

declare module Foo { 
} 

declare module Fun { 
} 

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

如果该文件在另一个引用import * as bridge from "./foo"; tsc说“文件foo.d.ts不是一个模块”。我做错了什么?

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

回答

3

你得到的错误的原因是你的foo.d.ts实际上不是一个模块,它是一个脚本。但导入声明应该仅用于模块。当您添加export interface Fix {}时,会将该文件转换为模块,这就是错误消失的原因。

公共规则是非常简单的,打字稿编译器将一个文件作为一个模块,如果有含出口改性剂的至少一个顶级实体(类/接口/可变..)。否则,文件将像脚本一样被处理。

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

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