【发布时间】:2016-11-23 13:36:30
【问题描述】:
我是一个打字稿新手,我正在挑选一个现有的 durandal 项目来进行一些更改。我注意到这段代码 sn-p 给出了 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 关键字并解决问题。
- 谁能解释为什么包含
declare关键字会导致此问题 问题,为什么删除它可以解决它? - 首先在这种情况下使用
declare的可能意图是什么(如果可能的话,用新手的话)? - 如果此代码以前有效,我的盒子怎么会失败? (可能是 typescript 或 durandal 版本之间的重大变化?)
谢谢。
更多信息
进一步研究这一点,当我比较编译的 js 时,我发现当我们使用 declare 关键字时缺少这一行
var routeLinks;
所以现在这个错误对我来说更有意义,但是为什么使用declare 会导致交叉编译器删除变量声明,这似乎违反直觉。
【问题讨论】:
-
这是运行时错误吧?不是汇编?
-
是的,运行时错误。
-
declare表示变量routeLinks已经在其他地方定义,并且应该在加载此代码sn-p 之前将其加载到环境中。当您删除declare时,它实际上将变量声明输出到已编译的 js。我不确定您是如何加载内容的,因此很难更具体地回答。 -
这正是我需要的答案,所以你知道,把它放在一个答案中,并获得一些很棒的分数!
标签: typescript durandal