2017-03-06 69 views
6

我正在寫一個應用程序來學習TypeScript。它在Chrome中運行良好,但在Edge中運行時遇到問題。我有這個方法:爲什麼我的TypeScript有時會給我一個實例,其他時間會給我一個類?

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!"); 
     } 

我看到的是,有時,差異是Vector2D而不是作爲的一個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瀏覽器和調試器調查時工具崩潰)

  • 它採用了最新的打字稿(2.2.1)

  • 似乎在啓動後隨機點發生,有時2秒,有時3秒

  • 有在發生這種情況的代碼等地,凡是涉及到PointVector2D,看似關係到每一幀創建它們(的一些問題消失,如果我介紹一個領域,而不是創造一個每幀)

  • 我使用的是AMD和requirejs

更新-------

使用邊緣和調試工具和設置「從服務器總是刷新」,從網絡加載時-現場(http://pacmanweb.azurewebsites.net/),我可以看到遊戲嘗試運行在所有模塊都加載之前。而在Chrome中,它似乎在運行遊戲之前等待所有內容加載。

任何想法?

+1

這確實真的很奇怪,有沒有什麼機會可以做出像pnkr這樣的東西來展示這個問題。我們可以玩的東西呢? :) – toskv

+0

@toskv - 我已經包含了一個鏈接到網站 - 希望你喜歡它(在你修好了之後:)) –

回答

2

該應用程序失敗,對我來說,因爲它看起來像您使用的是留在transpiled代碼是默認參數值:

reset(isDemoMode = false) { 

此ES6功能似乎並沒有被邊緣支撐,而Chrome的最可能會。

tsc應自動將其轉換爲ES5。你應該檢查你的配置,確保你沒有設置輸出es6代碼。

如:

function obj(x = 5) { 
} 

應transpiled到:

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

而到了playground的鏈接。

+0

你是明星!非常感謝。我現在只需要實現一個等待加載腳本,聲音和字體的加載屏幕。再次感謝隊友。 –

+0

好..如果你有另外一個具體的問題提出另一個問題。 :) – toskv

相關問題