我是打字稿的新手,我正在接受一个现有的durandal项目进行一些改动。我注意到此代码段提供了运行时错误。
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
的可能意图是什么(如果可能的话,用新手来说)? 感谢。
更多信息
再看一下,当我比较编译的js时,我发现当我们使用declare
关键字
var routeLinks;
所以错误现在对我来说更有意义,但为什么使用declare
会导致交叉编译器删除变量声明,这似乎是违反直觉的。
答案 0 :(得分:3)
关于$ svn update --username 'user2' --password 'password'
关键字背后的想法是告诉编译器当代码加载到环境中时,变量(或类,函数等)将出现在运行时。
这在使用不具有声明文件的库时非常有用。
例如,以下代码:
declare
编译为:
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);
关键字时,编译器将忽略它并且不会将其输出到生成的js。
在您的情况下,变量可能未在运行时定义,这就是您在删除declare
时没有收到错误的原因。
您可以在此处详细了解:Quick Tip – TypeScript Declare Keyword