gpt4 book ai didi

typescript - 声明仅部分加载的内部模块的函数 - typescript 编译器错误

转载 作者:搜寻专家 更新时间:2023-10-30 22:03:04 24 4
gpt4 key购买 nike

我使用一个分为两个文件的内部模块(“AllianceModule”)。第一个在页面启动期间加载。第二个只在需要时加载。我将加载脚本过程从创建新的 HTMLScriptElement 更改为使用 $.ajax 加载第二个脚本。我这样做是为了在加载内部模块的第二部分时可以使用回调方法。此回调加载一个方法(称为“entryPoint”),它是第二个脚本的一部分。

Visual Studio 编译一切都很好,程序运行良好。从命令行运行 ts-compiler

tsc References.ts --out main.js

其中 references.ts 包含页面启动期间所需的所有文件给出错误:

C:\sources\TSProject\Onload.ts(137,126):错误 TS2094:属性“entryPoint”在“typeof AllianceModule”类型的值上不存在。

“entryPoint”是第二个模块的导出“静态”函数,不会从第一个模块内部调用。

我尝试添加

declare function entryPoint(allianceId: number, _parent: JQuery): void;

到内部模块,但编译器抛出相同的错误。创建一个接口(interface)并定义一个接口(interface)类型的 var 也不起作用(但我怀疑我这样做确实犯了错误)。

我如何声明该方法,以便不再抛出错误(除了“强制转换”到 any 然后调用该方法)?

Onload.ts:

function onLoadDoThis()
{
//some code...
$("#aButton").click(function () { Scripts.scriptsAdmin.loadAndRun(3, 3, './Alliances.js', true, () => {(AllianceModule).entryPoint(0,null); } ); });
//more code
}
$(document).ready(onLoadDoThis);

AlliancesBase.ts 包含的文件

module AllianceModule {
//a lot of code always needed and thus loaded during startup
}

Alliances.ts 文件包含

module AllianceModule {
//some alliances stuff only needed when the user does some specific actions

export function entryPoint(allianceId: number,_parent : JQuery) {

if (allianceId) {
console.log('EinzelAllianz');
(new AllianceDetails(allianceId)).allianceDetails(_parent);
}
else {
console.log("Alle Allianzen");
runTemplate();
}
}
}

我正在编译 References.ts,其中仅包含对 OnLoad.ts 和 AlliancesBase.ts 的引用。

附言:

第一个答案建议将 declare 函数放在模块内部。这没有帮助,可能是因为我从模块外部调用该方法(单击按钮事件)。我在声明后直接在 AlliancesBase.ts 中创建了一个转发方法:

declare function entryPoint(allianceId: number, _parent: JQuery): void;
export function entryPoint2(allianceId: number, _parent: JQuery) {
AllianceModule.entryPoint(allianceId, _parent);
}

这也无济于事,因为我一直将 entryPoint 调用为导出函数 - 而在编译 References.ts 文件时,tsc 编译器不知道这个导出函数。

最佳答案

declare function entryPoint(allianceId: number, _parent: JQuery): void;

那是包裹在模块里的吗?如果不是,则它声明了一个全局 entryPoint 函数,而不是 AllianceModule 内部的方法。将它包装在 module AllianceModule { ... } 中,您可以在其中声明它这样做。

关于typescript - 声明仅部分加载的内部模块的函数 - typescript 编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25044720/

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