我在导出时遇到了一些问题,就像在title中所说的,在声明文件中将命名空间从外部模块导出到全局命名空间。在这里,我将发布这段代码来更好地解释我的问题。
//someClass.d.ts-由于不相关的原因,我必须声明这样的类

interface SomeClassConstructor {
    new(): SomeClass;
    prototype: SomeClass;
    /* static method and variables of SomeClass*/
}
interface SomeClass {
    /* method and variables of SomeClass */
}
declare const SomeClass: SomeClassConstructor;
export = SomeClass;

//externalmodule.d.ts外部模块
import SomeClass_ = require("./SomeClass");
interface Module {
    /* declarations */
    SomeClass: typeof SomeClass_;
}
declare namespace Module {
    /* other declarations */
    export type SomeClass = SomeClass_;
}
export = Module;

//module.d.ts模块
import module = require("./externalModule");
declare global {
    interface Window {
        Module: module;
    }
    // What insert here to access Module as a namespace
}
// var someObject: /* like this here: --> */ Module.SomeClass = new window.Module.SomeClass();
//this below of course works, but I need to acces Module globally
var someOtherObject: module.SomeClass = new module.SomeClass();

编辑:也许这能帮助别人回答这个问题。
我发现这样做:
_//script.ts脚本__
/// <reference path="module.d.ts"/>
const Module = window.Module;
var SomeClass = new window.Module.SomeClass();

通过类型推断,我得到了一个类型为type:module.someClass的类,并且我可以通过以下操作访问该类型:
var someObject: typeof SomeClass;

但是,为了避免不需要的module.someClass初始化,我必须将var SomeClass = new window.Module.SomeClass()替换为var SomeClass;(这提供了any类型)。
这是一个不好的解决办法,我最好避免。

最佳答案

执行以下操作不起作用,因为consts和命名空间是不同的:

// module.d.ts
declare global {
    interface Window {
        Module: module;
    }
    const Module: typeof module;
    type Module = typeof module;
}

但是,以下操作应该有效:
//module.d.ts
import module = require("./externalModule");
export = module
export as namespace Module
declare global {
    interface Window {
        Module: typeof module;
    }
}

注意,如果您可以修改externalmodule.d.ts,那么您只需在其中添加export as namespace Module声明。

关于typescript - 将命名空间从外部模块重新导出到声明文件中的全局,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48297740/

10-14 12:13