gin*_*boy 5 typescript durandal
我是一个打字稿新手,我正在选择一个现有的 durandal 项目来进行一些更改。我注意到这个代码片段给出了一个运行时错误。
declare var routeLinks: IRouteLinks;
routeLinks = new RouteLinks();
export = routeLinks;
Run Code Online (Sandbox Code Playgroud)
错误 = Failed to load root module (ui/shell). Details: routeLinks is not defined(…)
但是,当我更改代码以删除declare关键字(如下)时,问题就消失了,代码似乎按预期工作。
var routeLinks: IRouteLinks;
routeLinks = new RouteLinks();
export = routeLinks;
Run Code Online (Sandbox Code Playgroud)
这种模式在很多地方被复制,每次我遇到运行时异常时,我都会进入并删除declare关键字并解决问题。
declare关键字会导致这个问题,为什么删除它可以解决这个问题? declare在这种情况下首先使用 的可能意图是什么(如果可能,用新手术语)?谢谢。
更多信息
进一步研究这一点,当我比较编译的 js 时,我发现当我们使用declare关键字时缺少这一行
var routeLinks;
Run Code Online (Sandbox Code Playgroud)
所以这个错误现在对我来说更有意义,但是为什么 usingdeclare会导致交叉编译器删除变量声明,这似乎违反直觉。
declare关键字背后的想法是告诉编译器,当代码加载到环境中时,将在运行时出现一个变量(或类、函数等)。
例如,当使用没有声明文件的库时,这很有用。
例如,以下代码:
declare var VERSION: string;
console.log(`loaded version: ${VERSION}`);
Run Code Online (Sandbox Code Playgroud)
编译为:
console.log("loaded version: " + VERSION);
Run Code Online (Sandbox Code Playgroud)
虽然这个:
var VERSION: string;
console.log(`loaded version: ${VERSION}`);
Run Code Online (Sandbox Code Playgroud)
编译成:
var VERSION;
console.log("loaded version: " + VERSION);
Run Code Online (Sandbox Code Playgroud)
使用declare关键字时,编译器将忽略它,不会将其输出到生成的 js。
在您的情况下,变量可能未在运行时定义,这就是为什么在删除declare.
您可以在此处阅读更多相关信息:快速提示 – TypeScript 声明关键字
| 归档时间: |
|
| 查看次数: |
3240 次 |
| 最近记录: |