我正在从事一个打字稿项目(用于浏览器(,在该项目中,我们使用的第三方库中具有从一定程度上使用的类型定义。在图书馆的类型定义中,其类是这样声明的:
declare namespace foo {
export class Bar { ... }
export class Baz { ... }
}
但是,库的实际实现将类放置在全局范围中,以便仅Bar
和Baz
可以提及它们。因此,使用foo.Bar
会编译,但在运行时不起作用。
为了使它起作用,我想以某种方式将foo
的所有导出物带入全局名称空间。我找不到任何明显的方法来做到这一点,所以到目前为止,我最好的尝试是制作一个环境声明文件
declare type Bar = foo.Bar;
declare const Bar: typeof foo.Bar;
并重复foo
中的每个导出类。这使我能够实例化类,将其用作类型,并调用它可能具有的任何静态功能,但是所有导出类型的同一名称两次都不理想。实现同一事情的较短方法似乎是
declare class Bar extends foo.Bar {}
但是现在我不必要地延长了课程,意图尚不清楚。
是否有更好的方法来别名/提取Globals的foo
的导出类型?
有一个专用语法用于从名称空间提取事物。
import Bar = foo.Bar;
将在一个名为 Bar
的单词下,将相应命名的类型,值和或名称空间带入范围。
确保将其放置在环境上下文中,例如d.ts
文件或嵌套在declare
上下文中。
如果foo
本身在运行时不存在,则该声明确实需要修复。
但是,这只是您第一次工作的速记,您实际上应该做的就是发送拉动请求以确定为修复声明,因为它被打破了。
还要注意,您的第二个解决方案涉及扩展Bar
,因为它会以意外的方式改变程序的行为。