Javascript 流类型和DOM对象
我正在尝试使用flowtype检查一些文件 不幸的是,我无法让它与dom对象一起工作: 我有这个密码Javascript 流类型和DOM对象,javascript,dom,gulp,ecmascript-6,flowtype,Javascript,Dom,Gulp,Ecmascript 6,Flowtype,我正在尝试使用flowtype检查一些文件 不幸的是,我无法让它与dom对象一起工作: 我有这个密码 this.canvasContext = this.canvas.getContext('2d'); …返回此错误: src/CanvasManager.js:43 43: this.canvasContext = this.canvas.getContext('2d'); ^^^^^^^^^^^^^^^^^
this.canvasContext = this.canvas.getContext('2d');
…返回此错误:
src/CanvasManager.js:43
43: this.canvasContext = this.canvas.getContext('2d');
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call of method `getContext`. Function cannot be called on
43: this.canvasContext = this.canvas.getContext('2d');
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ HTMLCanvasElement
因此,flow基本上可以识别htmlcanvaseElement
,但似乎不知道它有一个getContext
方法
我错过什么了吗?
如果没有,有没有办法扩展DOM定义
创建自己的HTMLCanvasElement
定义将导致名称不匹配:
src/PlayingField.js:23
23: constructor(gameController: GameController, canvas: HTMLCanvasElement) {
^^^^^^^^^^^^^^^^^ HTMLCanvasElement. This type is incompatible with
23: constructor(gameController: GameController, canvas: HTMLCanvasElement) {
^^^^^^^^^^^^^^^^^ HTMLCanvasElement
似乎这是一个从v0.18.1开始就存在的bug。这在0.22.1中仍然是一个问题。由于某些原因,Flow无法正确地看到
document.createElement('canvas')
返回一种类型的HTMLCanvasElement
,即使它在包含的DOM定义文件中定义为交集类型
要解决这个问题,只需添加一个if语句,用于检查document.createElement
的返回值类型。例如:
var canvas = document.createElement('canvas');
if (!(canvas instanceof HTMLCanvasElement)) {
throw new Error('Unable to construct HTMLCanvasElement.');
}
// Do canvas specific stuff here
错误消息未完成:“无法调用函数”。。。它说了什么?消息是完整的,但它很麻烦:-它只是分成不同的行
调用方法`getContext`。无法在HtmlCanvaElement上调用函数
我尝试更新-错误仍然存在于0.19:$flow version flow中,这是JavaScript的静态类型检查器,版本0.19.0
奇怪。声明位于核心库源代码中。使用0.19,您可以提供自己的声明,这将覆盖核心库。请参阅中有关声明文件的部分。我对流0.19也有相同的问题。更新到流0.20后,错误更改为:调用方法“getContext”。无法在交叉点上调用函数:函数类型。
这在版本0.22.1中仍然是一个问题。