我正在编写应用以学习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 ...
方法toVector2D
只是:
toVector2D(): Vector2D {
return new Vector2D(this.x, this.y);
}
我不知道这是否有所作为,但这里有一些背景知识:
该应用是一款在游戏循环中运行的游戏(每秒60帧 - 使用window.requestAnimationFrame(() => this.animloop());
)
该应用在Chrome中正常运行
它在IE中运行不正常(它看起来像是一个不同的问题,但我还没能看到IE和调试工具在调查时崩溃)
它使用最新的TypeScript(2.2.1)
它似乎发生在启动后的随机点,有时是2秒,有时是3秒
代码中还有其他地方发生这种情况,都与Point
和Vector2D
相关,似乎与在每个框架中创建它们有关(如果我介绍的话,一些问题就会消失一个字段,而不是每帧创建一个字段)
我正在使用AMD和requirejs
更新-------
使用Edge和调试工具并设置&#39;始终从服务器刷新&#39;,从网站(http://pacmanweb.azurewebsites.net/)加载时,我可以看到游戏尝试在加载所有模块之前运行 。而在Chrome中,它似乎在运行游戏之前等待加载所有内容。
有什么想法吗?
答案 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。
的链接