angular - 角度打字稿中非模块的类型声明文件
问题描述
我正在使用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 中,如何为不属于模块的类编写类型声明文件?
解决方案
您可以将其写在声明文件中(调用它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);
不导入任何内容的情况下直接使用。
这是因为您不需要导入任何内容,因为代码本身已经在环境中。创建一个声明文件,您只需告诉编译器存在这样的类,而不提供定义(类似于您最初所做的,但可用于整个项目)。
推荐阅读
- c# - 在 HoloLens 上部署 Tensorflow 训练模型
- html - 如何让div背景滑入?
- visual-studio - VS 2019 更新后尝试构建 Xamarin.Android 时出错
- javascript - 如何使用时刻动态从周数中找到周开始日期
- javascript - Foreach 仅循环通过表格的最后一列(ES6)
- c - C中sendto()和recvfrom()之间的形式参数区别
- javascript - 如何防止 Bootstrap Modal 自动关闭?
- javascript - 使用数据表进行高级搜索
- python - 如何更改日期列表上的日期格式(并在通过 openpyxl 保存到 excel 时保留该日期格式)?
- java - 有没有一种方法可以在不手动遍历 AST 的情况下获取方法中的所有语句