声明 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
关键字,它就解决了问题。
- 任何人都可以解释为什么包含
declare
关键字会导致此问题
问题,为什么删除它可以解决问题?
- 首先在这种情况下使用
declare
的可能意图是什么(如果可能,用新手术语来说)?
- 如果此代码之前有效,为什么我的盒子会失败? (可能是 typescript 或 durandal 版本之间的重大更改?)
谢谢。
更多信息
进一步查看,当我比较编译后的 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
我是打字稿新手,我正在选择一个现有的 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
关键字,它就解决了问题。
- 任何人都可以解释为什么包含
declare
关键字会导致此问题 问题,为什么删除它可以解决问题? - 首先在这种情况下使用
declare
的可能意图是什么(如果可能,用新手术语来说)? - 如果此代码之前有效,为什么我的盒子会失败? (可能是 typescript 或 durandal 版本之间的重大更改?)
谢谢。
更多信息
进一步查看,当我比较编译后的 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