我遇到了一些问题导出,就像它在标题上说的那样,是一个从外部模块到声明文件中的全局命名空间的命名空间。在这里,我将发布这段代码以更好地解释我的问题。
// 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 = new window.Module.SomeClass()
替换为var SomeClass;
(提供任何类型),以避免不必要的 Module.SomeClass 初始化。
这是一个糟糕的解决方法,我最好避免。
答案 0 :(得分:0)
执行以下操作无效,因为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
声明。