声明 var 导致未定义错误

declaring var results in undefined error

我是打字稿新手,我正在选择一个现有的 durandal 项目来进行一些更改。我注意到这段代码片段给出了一个 runtime 错误。

declare var routeLinks: IRouteLinks;
routeLinks = new RouteLinks();
export = routeLinks;

错误=Failed to load root module (ui/shell). Details: routeLinks is not defined(…)

然而,当我更改代码以删除 declare 关键字(如下)时,问题消失了,代码似乎按预期工作。

var routeLinks: IRouteLinks;
routeLinks = new RouteLinks();
export = routeLinks;

这个模式在很多地方都有复制,每次我遇到运行时异常时,我都会进去并删除 declare 关键字,它就解决了问题。

谢谢。

更多信息

进一步查看,当我比较编译后的 js 时,我发现使用 declare 关键字时缺少这一行

 var routeLinks;

所以这个错误现在对我来说更有意义了,但是为什么使用 declare 会导致交叉编译器放弃变量声明,这似乎违反直觉。

declare 关键字背后的想法是告诉编译器,当代码加载到环境中时,变量(或 class、函数等)将在运行时出现。
例如,这在使用没有声明文件的库时很有用。

例如下面的代码:

declare var VERSION: string;
console.log(`loaded version: ${VERSION}`);

编译为:

console.log("loaded version: " + VERSION);

同时:

var VERSION: string;
console.log(`loaded version: ${VERSION}`);

编译成:

var VERSION;
console.log("loaded version: " + VERSION);

当使用declare关键字时,编译器会忽略它,不会输出到生成的js中。

在您的情况下,变量可能未在运行时定义,这就是为什么在删除 declare.

时不会出现错误的原因

您可以在此处阅读更多相关信息:Quick Tip – TypeScript Declare Keyword