【问题标题】:Comment referenced class throws ReferenceError at runtime注释引用的类在运行时抛出 ReferenceError
【发布时间】:2013-05-03 16:59:16
【问题描述】:

这在编译时构建没有错误,但是当我运行它时,当我尝试使用 net 类时,我得到了一个 ReferenceError。 (网未定义)

//chat.ts file
/// <reference path="../client/net.ts" />
class chat {
    constructor(public chatHub: any) {
       net.call(chatHub.server.getUsers());
    } 
}

//net.ts file
class net {
    public call(callback: () => any): any {
        //stuff here
        return callback();
    }
} 

我尝试过的事情:

  • 将net转成模块并导出函数。不起作用,因为执行导出会触发 AMD 模块转换,然后需要在我的聊天类中导入它,这会将我的聊天类变成 AMD 模块,使其超出所有引用 chat.ts 的类的范围。 AMD 厄运连连。
  • 尝试了静态、公共、模块、类和导出的所有可能排列。没有骰子。

我想做的就是在我的聊天课上使用我的网络课上的实用功能。

【问题讨论】:

  • 不应该是net.call(chatHub.server.getUsers);吗?
  • 嗯,你说得对,我还没有运行那个代码。

标签: javascript typescript amd durandal


【解决方案1】:

您是否记得将 net.js 文件添加到页面(chat.js 文件上方的某个位置)?仅在 TypeScript 中引用它不会为您加载它。

您需要将 AMD 模块定义与 require.js 之类的加载程序结合使用,或者确保将所需的所有 .js 文件(一次一个或捆绑)添加到您的页面。注释引用所做的只是告诉编译器在哪里可以找到类型信息。

【讨论】:

  • 我正在使用 Durandal,它被设置为将所有内容捆绑在其子文件夹中。问题是它没有触发告诉它捆绑这个文件的东西,并且无法弄清楚为什么
  • 这与您提出的问题略有不同。使用 Durandal,您最好在 IMO 将您的代码打包为一个模块并使用 require 加载它。我会更新的。
  • 例如,我的聊天类是从我的 Lobby 类中使​​用的,效果很好,它被正确捆绑和引用。
  • 所以你的问题与 TS 无关,真的 - 只是 Durandal 捆绑的问题。我自己从未使用过 Durandal 的那部分 - 我一直使用 AMD 模块。
  • 完整性检查:net.js 位于您的 Durandal App/ 文件夹下的某个位置,对吗? durandaljs.com/documentation/Optimizing-On-Dot-Net
猜你喜欢
  • 2016-06-21
  • 1970-01-01
  • 2019-06-03
  • 2019-06-29
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
相关资源
最近更新 更多