首页 > 解决方案 > 角度打字稿中非模块的类型声明文件

问题描述

我正在使用Angular6为Beaker Browser建立一个网站。

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';

尽管它通过了编译,但在运行时,它似乎在模块内部寻找 a DatArchive,但 aDatArchive是顶级(window对象)类。

所以,问题:

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

标签: angulartypescripttype-declaration

解决方案


您可以将其写在声明文件中(调用它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);不导入任何内容的情况下直接使用。

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


推荐阅读