Re-export 声明文件中从外部模块到全局的命名空间

Re-export namespace from external module to global in declaration file

我 运行 在导出时遇到了一些问题,就像标题中所说的那样,将名称空间从外部模块导出到声明文件中的全局名称空间。这里我将 post 这段代码来更好地解释我的问题。

//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();

通过类型推断,我得到了 SomeClass 作为类型:Module.SomeClass,我可以访问类型:

var someObject: typeof SomeClass;

但是我必须用 var SomeClass; 替换 var SomeClass = new window.Module.SomeClass() (这给出了 any 的类型)以避免不需要的 Module.SomeClass 初始化。 这是一个糟糕的解决方法,我最好避免。

执行以下操作无效,因为 const 和名称空间不同:

// 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 声明即可。