gpt4 book ai didi

typescript - 在声明文件中将 namespace 从外部模块重新导出到全局

转载 作者:搜寻专家 更新时间:2023-10-30 21:13:47 25 4
gpt4 key购买 nike

我在导出时遇到了一些问题,就像标题中所说的那样,将一个 namespace 从外部模块导出到声明文件中的全局 namespace 。在这里我将发布一段代码以更好地解释我的问题。

//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;(这给出了一种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 声明即可。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com