角度打字稿中非模块的类型声明文件

时间:2018-06-16 14:38:30

标签: angular typescript type-declaration

我正在使用Beaker BrowserAngular6构建网站。

Beaker Browser有一个名为DatArchive的内置类。我想为它创建一个类型声明文件。

当这个类只在一个文件中使用时,我只写了

declare class DatArchive {
  static selectArchive(opts: any): Promise<DatArchive>;
  static create(opts: any): Promise<DatArchive>;
  constructor(datUrl: String);
  url: string;
}

在文件中,一切都像魅力一样。但是,当我想将其提取到自己的文件中时,我尝试了:

export declare class DatArchive {
  static selectArchive(opts: any): Promise<DatArchive>;
  static create(opts: any): Promise<DatArchive>;
  constructor(datUrl: String);
  url: string;
}
...
// in other files
import { DatArchive } from 'dat-archive';

虽然它通过了编译,但在运行时,似乎它在模块中寻找DatArchive,但DatArchive是顶级(在window对象上)类

所以,问题是:

在Angular / Typescript中,如何为不属于模块的类编写类型声明文件?

1 个答案:

答案 0 :(得分:2)

您可以在声明文件中将其写入(称为beaker-browser.d.ts):

declare class DatArchive {
  static selectArchive(opts: any): Promise<DatArchive>;
  static create(opts: any): Promise<DatArchive>;
  constructor(datUrl: String);
  url: string;
}

将它放入一个声明文件使它成为一个全局声明,所以你可以只使用let dataArchive = new DataArchive(url);而不导入任何东西。

这是因为您不需要导入任何内容,因为代码本身已经在环境中。创建一个声明文件,您只需告诉编译器这样的类存在,而不提供定义(类似于您最初所做的,但可用于整个项目)。