为什么我的TypeScript有时会给我一个实例,有时候给我一个课程?

时间:2017-03-06 08:02:03

标签: javascript typescript html5-canvas microsoft-edge

我正在编写应用以学习TypeScript。它在Chrome中运行良好,但在Edge中运行时遇到问题。我有这种方法:

 set position(pos: Point) {
        const diffAsPoint = pos.minus(this.canvasPos);

        let diff: Vector2D = diffAsPoint.toVector2D(); // <--- this line
        if (diff instanceof Vector2D) {
            console.info("is a vector!");
        } else {
            console.info("not a vector!");
        }

我看到,有时,diff是Vector2D而不是 a Vector2D的实例。显然,当发生这种情况时,对其进行的任何操作都会产生Object doesn't support property or method ...

debugger showing class rather than instance

方法toVector2D只是:

toVector2D(): Vector2D {
    return new Vector2D(this.x, this.y);
}

我不知道这是否有所作为,但这里有一些背景知识:

  • 该应用是一款在游戏循环中运行的游戏(每秒60帧 - 使用window.requestAnimationFrame(() => this.animloop());

  • 该应用在Chrome中正常运行

  • 它在IE中运行不正常(它看起来像是一个不同的问题,但我还没能看到IE和调试工具在调查时崩溃)

  • 它使用最新的TypeScript(2.2.1)

  • 它似乎发生在启动后的随机点,有时是2秒,有时是3秒

  • 代码中还有其他地方发生这种情况,都与PointVector2D相关,似乎与在每个框架中创建它们有关(如果我介绍的话,一些问题就会消失一个字段,而不是每帧创建一个字段)

  • 我正在使用AMD和requirejs

更新-------

使用Edge和调试工具并设置&#39;始终从服务器刷新&#39;,从网站(http://pacmanweb.azurewebsites.net/)加载时,我可以看到游戏尝试在加载所有模块之前运行 。而在Chrome中,它似乎在运行游戏之前等待加载所有内容。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

该应用程序失败了,因为看起来您使用的是默认参数值,这些参数值保留在已转换的代码中:

  reset(isDemoMode = false) {

Edge似乎并不支持此ES6功能,而Chrome最有可能。

tsc应该自动将其转换为ES5。您应该检查您的配置,确保没有将其设置为输出es6代码。

例如:

function obj(x = 5) {  
}

应该转化为:

function obj(x) {
    if (x === void 0) { x = 5; }
}

指向playground

的链接