类型 'CanvasRenderingContext2D | WebGLRenderingContext' 不可分配给类型 'CanvasRenderingContext2D'

Type 'CanvasRenderingContext2D | WebGLRenderingContext' is not assignable to type 'CanvasRenderingContext2D'

我已经升级到 Visual Studio 2015 Community with Typescript 1.5 Beta。我收到以下错误。

Type 'CanvasRenderingContext2D | WebGLRenderingContext' is not assignable to type 'CanvasRenderingContext2D'

这发生在下一行

var canvas: HTMLCanvasElement = $(element).find('canvas').get(0);
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");

我已将 TypeScript 工具版本设置为 1.4 和 1.5,但出现相同的错误。

从错误消息来看,getContext的return类型似乎是一个联合类型,这意味着它是CanvasRenderingContext2DWebGLRenderingContext之一。

编译器无法判断是哪一个,所以你需要帮助它:

var ctx = <CanvasRenderingContext2D> canvas.getContext("2d");

但是,如果我用最新版本的所有东西尝试这个,效果很好:

var canvas = <HTMLCanvasElement> $('#example').find('canvas').get(0);
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");

所以看起来有些不对劲。

getContext 的当前定义具有值“2d”的专用签名,应该返回 CanvasRenderingContext2D。这是三个签名...

  1. "2d" : CanvasRenderingContext2D
  2. "experimental-webgl" : WebGLRenderingContext
  3. 其他 string : CanvasRenderingContext2D | WebGLRenderingContext

如果它不能识别传入的字符串,它应该只返回联合类型。

如果您在 getContext 后键入 ( 时自动完成不建议这三个重载,则可能表明存在问题。