打字稿:在全局名称空间中混合名称声明的声明



我正在从事一个打字稿项目(用于浏览器(,在该项目中,我们使用的第三方库中具有从一定程度上使用的类型定义。在图书馆的类型定义中,其类是这样声明的:

declare namespace foo {
    export class Bar { ... }
    export class Baz { ... }
}

但是,库的实际实现将类放置在全局范围中,以便仅BarBaz可以提及它们。因此,使用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,因为它会以意外的方式改变程序的行为。

最新更新