我在导出时遇到了一些问题,就像在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类型)。这是一个不好的解决办法,我最好避免。
最佳答案
执行以下操作不起作用,因为const
s和命名空间是不同的:
// 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/